45 class Channel :
- 46 # Required by Hypnotix
- 47 info = ""
- 48 id = ""
- 49 name = "" # What is the difference between the below name and title?
- 50 logo = ""
- 51 logo_path = ""
- 52 group_title = ""
- 53 title = ""
- 54 url = ""
- 55
- 56 # XTream
- 57 stream_type : str = ""
- 58 group_id : str = ""
- 59 is_adult : int = 0
- 60 added : int = 0
- 61 epg_channel_id : str = ""
- 62 age_days_from_added : int = 0
- 63 date_now : datetime
- 64
- 65 # This contains the raw JSON data
- 66 raw : dict = {}
- 67
- 68 def __init__ ( self , xtream : object , group_title , stream_info ):
- 69 self . date_now = datetime . now ( timezone . utc )
- 70
- 71 stream_type = stream_info [ "stream_type" ]
- 72 # Adjust the odd "created_live" type
- 73 if stream_type in ( "created_live" , "radio_streams" ):
- 74 stream_type = "live"
- 75
- 76 if stream_type not in ( "live" , "movie" ):
- 77 print ( f "Error the channel has unknown stream type "
- 78 f "` { stream_type } ` \n ` { stream_info } `" )
- 79 else :
- 80 # Raw JSON Channel
- 81 self . raw = stream_info
+ 50 class Channel :
+ 51 """Represents a Live TV or VOD stream."""
+ 52 def __init__ ( self , xtream : object , group_title , stream_info : dict ):
+ 53 self . date_now = datetime . now ( timezone . utc )
+ 54 self . stream_type = stream_info [ "stream_type" ]
+ 55 # Adjust the odd "created_live" type
+ 56 if self . stream_type in ( "created_live" , "radio_streams" ):
+ 57 self . stream_type = "live"
+ 58
+ 59 if self . stream_type not in ( "live" , "movie" ):
+ 60 print ( f "Error the channel has unknown stream type "
+ 61 f "` { self . stream_type } ` \n ` { stream_info } `" )
+ 62 self . raw = {}
+ 63 else :
+ 64 # Raw JSON Channel
+ 65 self . raw = stream_info
+ 66
+ 67 stream_name = stream_info [ "name" ]
+ 68
+ 69 # Required by Hypnotix
+ 70 self . id = stream_info [ "stream_id" ]
+ 71 self . name = stream_name
+ 72 self . logo = stream_info [ "stream_icon" ]
+ 73 self . logo_path = xtream . _get_logo_local_path ( self . logo )
+ 74 self . group_title = group_title
+ 75 self . title = stream_name
+ 76
+ 77 # Check if category_id key is available
+ 78 if "category_id" in stream_info . keys ():
+ 79 self . group_id = int ( stream_info [ "category_id" ])
+ 80
+ 81 stream_extension = ""
82
- 83 stream_name = stream_info [ "name" ]
- 84
- 85 # Required by Hypnotix
- 86 self . id = stream_info [ "stream_id" ]
- 87 self . name = stream_name
- 88 self . logo = stream_info [ "stream_icon" ]
- 89 self . logo_path = xtream . _get_logo_local_path ( self . logo )
- 90 self . group_title = group_title
- 91 self . title = stream_name
+ 83 if self . stream_type == "live" :
+ 84 stream_extension = "ts"
+ 85
+ 86 # Check if epg_channel_id key is available
+ 87 if "epg_channel_id" in stream_info . keys ():
+ 88 self . epg_channel_id = stream_info [ "epg_channel_id" ]
+ 89
+ 90 elif self . stream_type == "movie" :
+ 91 stream_extension = stream_info [ "container_extension" ]
92
- 93 # Check if category_id key is available
- 94 if "category_id" in stream_info . keys ():
- 95 self . group_id = int ( stream_info [ "category_id" ])
- 96
- 97 stream_extension = ""
+ 93 # Default to 0
+ 94 self . is_adult = 0
+ 95 # Check if is_adult key is available
+ 96 if "is_adult" in stream_info . keys ():
+ 97 self . is_adult = int ( stream_info [ "is_adult" ])
98
- 99 if stream_type == "live" :
-100 stream_extension = "ts"
-101
-102 # Check if epg_channel_id key is available
-103 if "epg_channel_id" in stream_info . keys ():
-104 self . epg_channel_id = stream_info [ "epg_channel_id" ]
-105
-106 elif stream_type == "movie" :
-107 stream_extension = stream_info [ "container_extension" ]
-108
-109 # Default to 0
-110 self . is_adult = 0
-111 # Check if is_adult key is available
-112 if "is_adult" in stream_info . keys ():
-113 self . is_adult = int ( stream_info [ "is_adult" ])
-114
-115 self . added = int ( stream_info [ "added" ])
-116 self . age_days_from_added = abs (
-117 datetime . fromtimestamp ( self . added , timezone . utc ) - self . date_now
-118 ) . days
+ 99 self . added = int ( stream_info [ "added" ])
+100 self . age_days_from_added = abs (
+101 datetime . fromtimestamp ( self . added , timezone . utc ) - self . date_now
+102 ) . days
+103
+104 # Required by Hypnotix
+105 self . url = f " { xtream . server } / { self . stream_type } / { xtream . authorization [ 'username' ] } /" \
+106 f " { xtream . authorization [ 'password' ] } / { stream_info [ 'stream_id' ] } . { stream_extension } "
+107
+108 # Check that the constructed URL is valid
+109 if not xtream . _validate_url ( self . url ):
+110 print ( f " { self . name } - Bad URL? ` { self . url } `" )
+111
+112 def export_json ( self ):
+113 """Return a dictionary representation of the channel with its computed URL."""
+114 jsondata = {}
+115
+116 jsondata [ "url" ] = self . url
+117 jsondata . update ( self . raw )
+118 jsondata [ "logo_path" ] = self . logo_path
119
-120 # Required by Hypnotix
-121 self . url = f " { xtream . server } / { stream_type } / { xtream . authorization [ 'username' ] } /" \
-122 f " { xtream . authorization [ 'password' ] } / { stream_info [ 'stream_id' ] } . { stream_extension } "
-123
-124 # Check that the constructed URL is valid
-125 if not xtream . _validate_url ( self . url ):
-126 print ( f " { self . name } - Bad URL? ` { self . url } `" )
-127
-128 def export_json ( self ):
-129 jsondata = {}
-130
-131 jsondata [ "url" ] = self . url
-132 jsondata . update ( self . raw )
-133 jsondata [ "logo_path" ] = self . logo_path
-134
-135 return jsondata
+120 return jsondata
-
+ Represents a Live TV or VOD stream.
+
+
- Channel (xtream : object , group_title , stream_info )
+ Channel (xtream : object , group_title , stream_info : dict )
View Source
-
68 def __init__ ( self , xtream : object , group_title , stream_info ):
- 69 self . date_now = datetime . now ( timezone . utc )
- 70
- 71 stream_type = stream_info [ "stream_type" ]
- 72 # Adjust the odd "created_live" type
- 73 if stream_type in ( "created_live" , "radio_streams" ):
- 74 stream_type = "live"
- 75
- 76 if stream_type not in ( "live" , "movie" ):
- 77 print ( f "Error the channel has unknown stream type "
- 78 f "` { stream_type } ` \n ` { stream_info } `" )
- 79 else :
- 80 # Raw JSON Channel
- 81 self . raw = stream_info
+ 52 def __init__ ( self , xtream : object , group_title , stream_info : dict ):
+ 53 self . date_now = datetime . now ( timezone . utc )
+ 54 self . stream_type = stream_info [ "stream_type" ]
+ 55 # Adjust the odd "created_live" type
+ 56 if self . stream_type in ( "created_live" , "radio_streams" ):
+ 57 self . stream_type = "live"
+ 58
+ 59 if self . stream_type not in ( "live" , "movie" ):
+ 60 print ( f "Error the channel has unknown stream type "
+ 61 f "` { self . stream_type } ` \n ` { stream_info } `" )
+ 62 self . raw = {}
+ 63 else :
+ 64 # Raw JSON Channel
+ 65 self . raw = stream_info
+ 66
+ 67 stream_name = stream_info [ "name" ]
+ 68
+ 69 # Required by Hypnotix
+ 70 self . id = stream_info [ "stream_id" ]
+ 71 self . name = stream_name
+ 72 self . logo = stream_info [ "stream_icon" ]
+ 73 self . logo_path = xtream . _get_logo_local_path ( self . logo )
+ 74 self . group_title = group_title
+ 75 self . title = stream_name
+ 76
+ 77 # Check if category_id key is available
+ 78 if "category_id" in stream_info . keys ():
+ 79 self . group_id = int ( stream_info [ "category_id" ])
+ 80
+ 81 stream_extension = ""
82
- 83 stream_name = stream_info [ "name" ]
- 84
- 85 # Required by Hypnotix
- 86 self . id = stream_info [ "stream_id" ]
- 87 self . name = stream_name
- 88 self . logo = stream_info [ "stream_icon" ]
- 89 self . logo_path = xtream . _get_logo_local_path ( self . logo )
- 90 self . group_title = group_title
- 91 self . title = stream_name
+ 83 if self . stream_type == "live" :
+ 84 stream_extension = "ts"
+ 85
+ 86 # Check if epg_channel_id key is available
+ 87 if "epg_channel_id" in stream_info . keys ():
+ 88 self . epg_channel_id = stream_info [ "epg_channel_id" ]
+ 89
+ 90 elif self . stream_type == "movie" :
+ 91 stream_extension = stream_info [ "container_extension" ]
92
- 93 # Check if category_id key is available
- 94 if "category_id" in stream_info . keys ():
- 95 self . group_id = int ( stream_info [ "category_id" ])
- 96
- 97 stream_extension = ""
+ 93 # Default to 0
+ 94 self . is_adult = 0
+ 95 # Check if is_adult key is available
+ 96 if "is_adult" in stream_info . keys ():
+ 97 self . is_adult = int ( stream_info [ "is_adult" ])
98
- 99 if stream_type == "live" :
-100 stream_extension = "ts"
-101
-102 # Check if epg_channel_id key is available
-103 if "epg_channel_id" in stream_info . keys ():
-104 self . epg_channel_id = stream_info [ "epg_channel_id" ]
-105
-106 elif stream_type == "movie" :
-107 stream_extension = stream_info [ "container_extension" ]
-108
-109 # Default to 0
-110 self . is_adult = 0
-111 # Check if is_adult key is available
-112 if "is_adult" in stream_info . keys ():
-113 self . is_adult = int ( stream_info [ "is_adult" ])
-114
-115 self . added = int ( stream_info [ "added" ])
-116 self . age_days_from_added = abs (
-117 datetime . fromtimestamp ( self . added , timezone . utc ) - self . date_now
-118 ) . days
-119
-120 # Required by Hypnotix
-121 self . url = f " { xtream . server } / { stream_type } / { xtream . authorization [ 'username' ] } /" \
-122 f " { xtream . authorization [ 'password' ] } / { stream_info [ 'stream_id' ] } . { stream_extension } "
-123
-124 # Check that the constructed URL is valid
-125 if not xtream . _validate_url ( self . url ):
-126 print ( f " { self . name } - Bad URL? ` { self . url } `" )
+ 99 self . added = int ( stream_info [ "added" ])
+100 self . age_days_from_added = abs (
+101 datetime . fromtimestamp ( self . added , timezone . utc ) - self . date_now
+102 ) . days
+103
+104 # Required by Hypnotix
+105 self . url = f " { xtream . server } / { self . stream_type } / { xtream . authorization [ 'username' ] } /" \
+106 f " { xtream . authorization [ 'password' ] } / { stream_info [ 'stream_id' ] } . { stream_extension } "
+107
+108 # Check that the constructed URL is valid
+109 if not xtream . _validate_url ( self . url ):
+110 print ( f " { self . name } - Bad URL? ` { self . url } `" )
-
-
-
- info =
-''
-
-
-
-
-
-
-
-
-
-
- id =
-''
-
-
-
-
-
-
-
-
-
-
- name =
-''
-
-
-
-
-
-
-
-
-
-
- logo =
-''
-
-
-
-
-
-
-
-
-
-
- logo_path =
-''
-
-
-
-
-
-
-
-
-
-
- group_title =
-''
-
-
-
-
-
-
-
-
-
-
- title =
-''
-
-
-
-
-
-
-
-
-
-
- url =
-''
-
-
-
-
-
-
-
-
-
-
- stream_type : str =
-''
-
-
-
-
-
-
-
-
-
-
- group_id : str =
-''
-
-
-
-
-
-
-
-
-
-
- is_adult : int =
-0
-
-
-
-
-
-
-
-
-
-
- added : int =
-0
-
-
-
-
-
-
-
-
-
-
- epg_channel_id : str =
-''
-
-
-
-
-
-
-
-
-
-
- age_days_from_added : int =
-0
-
-
-
-
-
-
-
- date_now : datetime.datetime
+ date_now
@@ -2024,14 +1767,13 @@
-
+
- raw : dict =
-{}
+ stream_type
-
+
@@ -2047,18 +1789,21 @@
-
128 def export_json ( self ):
-129 jsondata = {}
-130
-131 jsondata [ "url" ] = self . url
-132 jsondata . update ( self . raw )
-133 jsondata [ "logo_path" ] = self . logo_path
-134
-135 return jsondata
+ 112 def export_json ( self ):
+113 """Return a dictionary representation of the channel with its computed URL."""
+114 jsondata = {}
+115
+116 jsondata [ "url" ] = self . url
+117 jsondata . update ( self . raw )
+118 jsondata [ "logo_path" ] = self . logo_path
+119
+120 return jsondata
-
+ Return a dictionary representation of the channel with its computed URL.
+
+
@@ -2073,66 +1818,59 @@
-
138 class Group :
-139 # Required by Hypnotix
-140 name = ""
-141 group_type = ""
-142
-143 # XTream
-144 group_id = ""
-145
-146 # This contains the raw JSON data
-147 raw : dict = {}
+ 123 class Group :
+124 """Represents a category of channels, movies, or series."""
+125 def convert_region_shortname_to_fullname ( self , shortname ):
+126
+127 if shortname == "AR" :
+128 return "Arab"
+129 if shortname == "AM" :
+130 return "America"
+131 if shortname == "AS" :
+132 return "Asia"
+133 if shortname == "AF" :
+134 return "Africa"
+135 if shortname == "EU" :
+136 return "Europe"
+137
+138 return ""
+139
+140 def __init__ ( self , group_info : dict , stream_type : str ):
+141 # Raw JSON Group
+142 self . raw = group_info
+143
+144 self . channels = []
+145 self . series = []
+146
+147 TV_GROUP , MOVIES_GROUP , SERIES_GROUP = range ( 3 )
148
-149 def convert_region_shortname_to_fullname ( self , shortname ):
-150
-151 if shortname == "AR" :
-152 return "Arab"
-153 if shortname == "AM" :
-154 return "America"
-155 if shortname == "AS" :
-156 return "Asia"
-157 if shortname == "AF" :
-158 return "Africa"
-159 if shortname == "EU" :
-160 return "Europe"
-161
-162 return ""
-163
-164 def __init__ ( self , group_info : dict , stream_type : str ):
-165 # Raw JSON Group
-166 self . raw = group_info
-167
-168 self . channels = []
-169 self . series = []
-170
-171 TV_GROUP , MOVIES_GROUP , SERIES_GROUP = range ( 3 )
-172
-173 if "VOD" == stream_type :
-174 self . group_type = MOVIES_GROUP
-175 elif "Series" == stream_type :
-176 self . group_type = SERIES_GROUP
-177 elif "Live" == stream_type :
-178 self . group_type = TV_GROUP
-179 else :
-180 print ( f "Unrecognized stream type "
-181 f "` { stream_type } ` for ` { group_info } `" )
-182
-183 self . name = group_info [ "category_name" ]
-184 split_name = self . name . split ( '|' )
-185 self . region_shortname = ""
-186 self . region_longname = ""
-187 if len ( split_name ) > 1 :
-188 self . region_shortname = split_name [ 0 ] . strip ()
-189 self . region_longname = self . convert_region_shortname_to_fullname ( self . region_shortname )
-190
-191 # Check if category_id key is available
-192 if "category_id" in group_info . keys ():
-193 self . group_id = int ( group_info [ "category_id" ])
+149 if "VOD" == stream_type :
+150 self . group_type = MOVIES_GROUP
+151 elif "Series" == stream_type :
+152 self . group_type = SERIES_GROUP
+153 elif "Live" == stream_type :
+154 self . group_type = TV_GROUP
+155 else :
+156 print ( f "Unrecognized stream type "
+157 f "` { stream_type } ` for ` { group_info } `" )
+158
+159 self . name = group_info [ "category_name" ]
+160 split_name = self . name . split ( '|' )
+161 self . region_shortname = ""
+162 self . region_longname = ""
+163 if len ( split_name ) > 1 :
+164 self . region_shortname = split_name [ 0 ] . strip ()
+165 self . region_longname = self . convert_region_shortname_to_fullname ( self . region_shortname )
+166
+167 # Check if category_id key is available
+168 if "category_id" in group_info . keys ():
+169 self . group_id = int ( group_info [ "category_id" ])
-
+ Represents a category of channels, movies, or series.
+
+
@@ -2144,82 +1882,76 @@
- 164 def __init__ ( self , group_info : dict , stream_type : str ):
-165 # Raw JSON Group
-166 self . raw = group_info
-167
-168 self . channels = []
-169 self . series = []
-170
-171 TV_GROUP , MOVIES_GROUP , SERIES_GROUP = range ( 3 )
-172
-173 if "VOD" == stream_type :
-174 self . group_type = MOVIES_GROUP
-175 elif "Series" == stream_type :
-176 self . group_type = SERIES_GROUP
-177 elif "Live" == stream_type :
-178 self . group_type = TV_GROUP
-179 else :
-180 print ( f "Unrecognized stream type "
-181 f "` { stream_type } ` for ` { group_info } `" )
-182
-183 self . name = group_info [ "category_name" ]
-184 split_name = self . name . split ( '|' )
-185 self . region_shortname = ""
-186 self . region_longname = ""
-187 if len ( split_name ) > 1 :
-188 self . region_shortname = split_name [ 0 ] . strip ()
-189 self . region_longname = self . convert_region_shortname_to_fullname ( self . region_shortname )
-190
-191 # Check if category_id key is available
-192 if "category_id" in group_info . keys ():
-193 self . group_id = int ( group_info [ "category_id" ])
+ 140 def __init__ ( self , group_info : dict , stream_type : str ):
+141 # Raw JSON Group
+142 self . raw = group_info
+143
+144 self . channels = []
+145 self . series = []
+146
+147 TV_GROUP , MOVIES_GROUP , SERIES_GROUP = range ( 3 )
+148
+149 if "VOD" == stream_type :
+150 self . group_type = MOVIES_GROUP
+151 elif "Series" == stream_type :
+152 self . group_type = SERIES_GROUP
+153 elif "Live" == stream_type :
+154 self . group_type = TV_GROUP
+155 else :
+156 print ( f "Unrecognized stream type "
+157 f "` { stream_type } ` for ` { group_info } `" )
+158
+159 self . name = group_info [ "category_name" ]
+160 split_name = self . name . split ( '|' )
+161 self . region_shortname = ""
+162 self . region_longname = ""
+163 if len ( split_name ) > 1 :
+164 self . region_shortname = split_name [ 0 ] . strip ()
+165 self . region_longname = self . convert_region_shortname_to_fullname ( self . region_shortname )
+166
+167 # Check if category_id key is available
+168 if "category_id" in group_info . keys ():
+169 self . group_id = int ( group_info [ "category_id" ])
-
-
- name =
-''
-
-
-
-
-
-
+
+
+
+
+ def
+ convert_region_shortname_to_fullname (self , shortname ):
-
-
-
- group_type =
-''
+ View Source
-
-
-
-
+
+
125 def convert_region_shortname_to_fullname ( self , shortname ):
+126
+127 if shortname == "AR" :
+128 return "Arab"
+129 if shortname == "AM" :
+130 return "America"
+131 if shortname == "AS" :
+132 return "Asia"
+133 if shortname == "AF" :
+134 return "Africa"
+135 if shortname == "EU" :
+136 return "Europe"
+137
+138 return ""
+
-
-
-
- group_id =
-''
-
-
-
-
- raw : dict =
-{}
+ raw
@@ -2227,37 +1959,6 @@
-
-
-
-
-
- def
- convert_region_shortname_to_fullname (self , shortname ):
-
- View Source
-
-
-
-
149 def convert_region_shortname_to_fullname ( self , shortname ):
-150
-151 if shortname == "AR" :
-152 return "Arab"
-153 if shortname == "AM" :
-154 return "America"
-155 if shortname == "AS" :
-156 return "Asia"
-157 if shortname == "AF" :
-158 return "Africa"
-159 if shortname == "EU" :
-160 return "Europe"
-161
-162 return ""
-
-
-
-
-
@@ -2280,6 +1981,17 @@
+
+
@@ -2315,126 +2027,104 @@
-
196 class Episode :
-197 # Required by Hypnotix
-198 title = ""
-199 name = ""
-200 info = ""
-201
-202 # XTream
-203
-204 # This contains the raw JSON data
-205 raw : dict = {}
-206
-207 def __init__ ( self , xtream : object , series_info , group_title , episode_info ) -> None :
-208 # Raw JSON Episode
-209 self . raw = episode_info
-210
-211 self . title = episode_info [ "title" ]
-212 self . name = self . title
-213 self . group_title = group_title
-214 self . id = episode_info [ "id" ]
-215 self . container_extension = episode_info [ "container_extension" ]
-216 self . episode_number = episode_info [ "episode_num" ]
-217 self . av_info = episode_info [ "info" ]
-218
-219 self . logo = series_info . get ( "cover" , "" )
-220 self . logo_path = xtream . _get_logo_local_path ( self . logo ) if len ( self . logo ) > 0 else ""
-221
-222 self . url = f " { xtream . server } /series/" \
-223 f " { xtream . authorization [ 'username' ] } /" \
-224 f " { xtream . authorization [ 'password' ] } / { self . id } . { self . container_extension } "
-225
-226 # Check that the constructed URL is valid
-227 if not xtream . _validate_url ( self . url ):
-228 print ( f " { self . name } - Bad URL? ` { self . url } `" )
+ 172 class Episode :
+173 """Represents a single episode of a TV series."""
+174 def __init__ ( self , xtream : object , series_info , group_title , episode_info : dict ) -> None :
+175 # Raw JSON Episode
+176 self . raw = episode_info
+177
+178 self . title = episode_info [ "title" ]
+179 self . name = self . title
+180 self . group_title = group_title
+181 self . id = episode_info [ "id" ]
+182 self . container_extension = episode_info [ "container_extension" ]
+183 self . episode_number = episode_info [ "episode_num" ]
+184 self . av_info = episode_info [ "info" ]
+185
+186 self . logo = series_info . get ( "cover" , "" )
+187 self . logo_path = xtream . _get_logo_local_path ( self . logo ) if len ( self . logo ) > 0 else ""
+188
+189 self . url = f " { xtream . server } /series/" \
+190 f " { xtream . authorization [ 'username' ] } /" \
+191 f " { xtream . authorization [ 'password' ] } / { self . id } . { self . container_extension } "
+192
+193 # Check that the constructed URL is valid
+194 if not xtream . _validate_url ( self . url ):
+195 print ( f " { self . name } - Bad URL? ` { self . url } `" )
-
+ Represents a single episode of a TV series.
+
+
- Episode (xtream : object , series_info , group_title , episode_info )
+ Episode (xtream : object , series_info , group_title , episode_info : dict )
View Source
-
207 def __init__ ( self , xtream : object , series_info , group_title , episode_info ) -> None :
-208 # Raw JSON Episode
-209 self . raw = episode_info
-210
-211 self . title = episode_info [ "title" ]
-212 self . name = self . title
-213 self . group_title = group_title
-214 self . id = episode_info [ "id" ]
-215 self . container_extension = episode_info [ "container_extension" ]
-216 self . episode_number = episode_info [ "episode_num" ]
-217 self . av_info = episode_info [ "info" ]
-218
-219 self . logo = series_info . get ( "cover" , "" )
-220 self . logo_path = xtream . _get_logo_local_path ( self . logo ) if len ( self . logo ) > 0 else ""
-221
-222 self . url = f " { xtream . server } /series/" \
-223 f " { xtream . authorization [ 'username' ] } /" \
-224 f " { xtream . authorization [ 'password' ] } / { self . id } . { self . container_extension } "
-225
-226 # Check that the constructed URL is valid
-227 if not xtream . _validate_url ( self . url ):
-228 print ( f " { self . name } - Bad URL? ` { self . url } `" )
+ 174 def __init__ ( self , xtream : object , series_info , group_title , episode_info : dict ) -> None :
+175 # Raw JSON Episode
+176 self . raw = episode_info
+177
+178 self . title = episode_info [ "title" ]
+179 self . name = self . title
+180 self . group_title = group_title
+181 self . id = episode_info [ "id" ]
+182 self . container_extension = episode_info [ "container_extension" ]
+183 self . episode_number = episode_info [ "episode_num" ]
+184 self . av_info = episode_info [ "info" ]
+185
+186 self . logo = series_info . get ( "cover" , "" )
+187 self . logo_path = xtream . _get_logo_local_path ( self . logo ) if len ( self . logo ) > 0 else ""
+188
+189 self . url = f " { xtream . server } /series/" \
+190 f " { xtream . authorization [ 'username' ] } /" \
+191 f " { xtream . authorization [ 'password' ] } / { self . id } . { self . container_extension } "
+192
+193 # Check that the constructed URL is valid
+194 if not xtream . _validate_url ( self . url ):
+195 print ( f " { self . name } - Bad URL? ` { self . url } `" )
-
-
- title =
-''
-
-
-
-
-
-
-
-
-
+
-
+
-
+
- raw : dict =
-{}
+ name
-
+
@@ -2539,223 +2229,161 @@
-
231 class Serie :
-232 # Required by Hypnotix
-233 name = ""
-234 logo = ""
-235 logo_path = ""
-236
-237 # XTream
-238 series_id = ""
-239 plot = ""
-240 youtube_trailer = ""
-241 genre = ""
+ 198 class Serie :
+199 """Represents a TV Series collection."""
+200 def __init__ ( self , xtream : object , series_info : dict ):
+201
+202 series_info [ "added" ] = series_info [ "last_modified" ]
+203
+204 # Raw JSON Series
+205 self . raw = series_info
+206 self . xtream = xtream
+207
+208 # Required by Hypnotix
+209 self . name = series_info [ "name" ]
+210 self . logo = series_info [ "cover" ]
+211 self . logo_path = xtream . _get_logo_local_path ( self . logo )
+212
+213 self . seasons = {}
+214 self . episodes = {}
+215
+216 # Check if category_id key is available
+217 if "series_id" in series_info . keys ():
+218 self . series_id = int ( series_info [ "series_id" ])
+219
+220 # Check if plot key is available
+221 if "plot" in series_info . keys ():
+222 self . plot = series_info [ "plot" ]
+223
+224 # Check if youtube_trailer key is available
+225 if "youtube_trailer" in series_info . keys ():
+226 self . youtube_trailer = series_info [ "youtube_trailer" ]
+227
+228 # Check if genre key is available
+229 if "genre" in series_info . keys ():
+230 self . genre = series_info [ "genre" ]
+231
+232 self . url = f " { xtream . server } /series/" \
+233 f " { xtream . authorization [ 'username' ] } /" \
+234 f " { xtream . authorization [ 'password' ] } / { self . series_id } /"
+235
+236 def export_json ( self ):
+237 """Return a dictionary representation of the series."""
+238 jsondata = {}
+239
+240 jsondata . update ( self . raw )
+241 jsondata [ 'logo_path' ] = self . logo_path
242
-243 # This contains the raw JSON data
-244 raw : dict = {}
-245
-246 def __init__ ( self , xtream : object , series_info ):
-247
-248 series_info [ "added" ] = series_info [ "last_modified" ]
-249
-250 # Raw JSON Series
-251 self . raw = series_info
-252 self . xtream = xtream
-253
-254 # Required by Hypnotix
-255 self . name = series_info [ "name" ]
-256 self . logo = series_info [ "cover" ]
-257 self . logo_path = xtream . _get_logo_local_path ( self . logo )
-258
-259 self . seasons = {}
-260 self . episodes = {}
-261
-262 # Check if category_id key is available
-263 if "series_id" in series_info . keys ():
-264 self . series_id = int ( series_info [ "series_id" ])
-265
-266 # Check if plot key is available
-267 if "plot" in series_info . keys ():
-268 self . plot = series_info [ "plot" ]
-269
-270 # Check if youtube_trailer key is available
-271 if "youtube_trailer" in series_info . keys ():
-272 self . youtube_trailer = series_info [ "youtube_trailer" ]
-273
-274 # Check if genre key is available
-275 if "genre" in series_info . keys ():
-276 self . genre = series_info [ "genre" ]
-277
-278 self . url = f " { xtream . server } /series/" \
-279 f " { xtream . authorization [ 'username' ] } /" \
-280 f " { xtream . authorization [ 'password' ] } / { self . series_id } /"
-281
-282 def export_json ( self ):
-283 jsondata = {}
-284
-285 jsondata . update ( self . raw )
-286 jsondata [ 'logo_path' ] = self . logo_path
-287
-288 return jsondata
+243 return jsondata
-
+ Represents a TV Series collection.
+
+
- Serie (xtream : object , series_info )
+ Serie (xtream : object , series_info : dict )
View Source
-
246 def __init__ ( self , xtream : object , series_info ):
-247
-248 series_info [ "added" ] = series_info [ "last_modified" ]
-249
-250 # Raw JSON Series
-251 self . raw = series_info
-252 self . xtream = xtream
-253
-254 # Required by Hypnotix
-255 self . name = series_info [ "name" ]
-256 self . logo = series_info [ "cover" ]
-257 self . logo_path = xtream . _get_logo_local_path ( self . logo )
-258
-259 self . seasons = {}
-260 self . episodes = {}
-261
-262 # Check if category_id key is available
-263 if "series_id" in series_info . keys ():
-264 self . series_id = int ( series_info [ "series_id" ])
-265
-266 # Check if plot key is available
-267 if "plot" in series_info . keys ():
-268 self . plot = series_info [ "plot" ]
-269
-270 # Check if youtube_trailer key is available
-271 if "youtube_trailer" in series_info . keys ():
-272 self . youtube_trailer = series_info [ "youtube_trailer" ]
-273
-274 # Check if genre key is available
-275 if "genre" in series_info . keys ():
-276 self . genre = series_info [ "genre" ]
-277
-278 self . url = f " { xtream . server } /series/" \
-279 f " { xtream . authorization [ 'username' ] } /" \
-280 f " { xtream . authorization [ 'password' ] } / { self . series_id } /"
+ 200 def __init__ ( self , xtream : object , series_info : dict ):
+201
+202 series_info [ "added" ] = series_info [ "last_modified" ]
+203
+204 # Raw JSON Series
+205 self . raw = series_info
+206 self . xtream = xtream
+207
+208 # Required by Hypnotix
+209 self . name = series_info [ "name" ]
+210 self . logo = series_info [ "cover" ]
+211 self . logo_path = xtream . _get_logo_local_path ( self . logo )
+212
+213 self . seasons = {}
+214 self . episodes = {}
+215
+216 # Check if category_id key is available
+217 if "series_id" in series_info . keys ():
+218 self . series_id = int ( series_info [ "series_id" ])
+219
+220 # Check if plot key is available
+221 if "plot" in series_info . keys ():
+222 self . plot = series_info [ "plot" ]
+223
+224 # Check if youtube_trailer key is available
+225 if "youtube_trailer" in series_info . keys ():
+226 self . youtube_trailer = series_info [ "youtube_trailer" ]
+227
+228 # Check if genre key is available
+229 if "genre" in series_info . keys ():
+230 self . genre = series_info [ "genre" ]
+231
+232 self . url = f " { xtream . server } /series/" \
+233 f " { xtream . authorization [ 'username' ] } /" \
+234 f " { xtream . authorization [ 'password' ] } / { self . series_id } /"
-
-
- name =
-''
-
-
-
-
-
-
-
-
-
-
- logo =
-''
-
-
-
-
-
-
-
-
-
-
- logo_path =
-''
-
-
-
-
-
-
-
-
-
-
- series_id =
-''
-
-
-
-
-
-
-
-
-
+
-
+
- youtube_trailer =
-''
+ xtream
-
+
-
+
-
+
- raw : dict =
-{}
+ logo
-
+
-
+
- xtream
+ logo_path
-
+
@@ -2804,17 +2432,20 @@
-
282 def export_json ( self ):
-283 jsondata = {}
-284
-285 jsondata . update ( self . raw )
-286 jsondata [ 'logo_path' ] = self . logo_path
-287
-288 return jsondata
+ 236 def export_json ( self ):
+237 """Return a dictionary representation of the series."""
+238 jsondata = {}
+239
+240 jsondata . update ( self . raw )
+241 jsondata [ 'logo_path' ] = self . logo_path
+242
+243 return jsondata
-
+ Return a dictionary representation of the series.
+
+
@@ -2829,17 +2460,18 @@
-
291 class Season :
-292 # Required by Hypnotix
-293 name = ""
-294
-295 def __init__ ( self , name ):
-296 self . name = name
-297 self . episodes = {}
+ 246 class Season :
+247 """Represents a specific season within a series."""
+248
+249 def __init__ ( self , name ):
+250 self . name = name
+251 self . episodes = {}
-
+ Represents a specific season within a series.
+
+
@@ -2851,9 +2483,9 @@
- 295 def __init__ ( self , name ):
-296 self . name = name
-297 self . episodes = {}
+ 249 def __init__ ( self , name ):
+250 self . name = name
+251 self . episodes = {}
@@ -2862,8 +2494,7 @@
- name =
-''
+ name
@@ -2895,1110 +2526,1174 @@
- 300 class XTream :
+ 254 class XTream :
+ 255 """Core client for interacting with Xtream Codes IPTV providers."""
+ 256 def __init__ (
+ 257 self ,
+ 258 provider_name : str ,
+ 259 provider_username : str ,
+ 260 provider_password : str ,
+ 261 provider_url : str ,
+ 262 headers : dict = {},
+ 263 hide_adult_content : bool = False ,
+ 264 cache_path : str = "" ,
+ 265 reload_time_sec : int = DEFAULT_RELOAD_TIME_SEC ,
+ 266 validate_json : bool = False ,
+ 267 enable_flask : bool = False ,
+ 268 debug_flask : bool = True ,
+ 269 flask_port : int = DEFAULT_FLASK_PORT
+ 270 ):
+ 271 """Initialize the XTream client.
+ 272
+ 273 Sets up the connection parameters, authentication state, and local cache
+ 274 configuration for interacting with an Xtream Codes IPTV provider.
+ 275
+ 276 Args:
+ 277 provider_name (str): Human-readable name of the IPTV provider.
+ 278 provider_username (str): Username for authentication.
+ 279 provider_password (str): Password for authentication.
+ 280 provider_url (str): Base URL of the IPTV provider.
+ 281 headers (dict, optional): Custom HTTP headers for requests. Defaults to {}.
+ 282 hide_adult_content (bool, optional): If True, filters out adult content. Defaults to False.
+ 283 cache_path (str, optional): Directory for local data persistence. Defaults to "".
+ 284 reload_time_sec (int, optional): Cache TTL in seconds. Defaults to DEFAULT_RELOAD_TIME_SEC.
+ 285 validate_json (bool, optional): If True, validates responses against schemas. Defaults to False.
+ 286 enable_flask (bool, optional): If True, starts the REST API server. Defaults to False.
+ 287 debug_flask (bool, optional): If True, enables Flask debug mode. Defaults to True.
+ 288 flask_port (int, optional): Port for the Flask server. Defaults to DEFAULT_FLASK_PORT.
+ 289 """
+ 290 self . server = provider_url
+ 291 self . username = provider_username
+ 292 self . password = provider_password
+ 293 self . name = provider_name
+ 294 self . cache_path = cache_path
+ 295 self . hide_adult_content = hide_adult_content
+ 296 self . threshold_time_sec = reload_time_sec
+ 297 self . validate_json = validate_json
+ 298 self . live_type = "Live"
+ 299 self . vod_type = "VOD"
+ 300 self . series_type = "Series"
301
- 302 name = ""
- 303 server = ""
- 304 secure_server = ""
- 305 username = ""
- 306 password = ""
- 307 base_url = ""
- 308 base_url_ssl = ""
- 309
- 310 cache_path = ""
+ 302 self . live_catch_all_group = Group (
+ 303 { "category_id" : "9999" , "category_name" : "xEverythingElse" , "parent_id" : 0 }, self . live_type
+ 304 )
+ 305 self . vod_catch_all_group = Group (
+ 306 { "category_id" : "9999" , "category_name" : "xEverythingElse" , "parent_id" : 0 }, self . vod_type
+ 307 )
+ 308 self . series_catch_all_group = Group (
+ 309 { "category_id" : "9999" , "category_name" : "xEverythingElse" , "parent_id" : 0 }, self . series_type
+ 310 )
311
- 312 account_expiration : timedelta
- 313
- 314 live_type = "Live"
- 315 vod_type = "VOD"
- 316 series_type = "Series"
- 317
- 318 hide_adult_content = False
- 319
- 320 live_catch_all_group = Group (
- 321 { "category_id" : "9999" , "category_name" : "xEverythingElse" , "parent_id" : 0 }, live_type
- 322 )
- 323 vod_catch_all_group = Group (
- 324 { "category_id" : "9999" , "category_name" : "xEverythingElse" , "parent_id" : 0 }, vod_type
- 325 )
- 326 series_catch_all_group = Group (
- 327 { "category_id" : "9999" , "category_name" : "xEverythingElse" , "parent_id" : 0 }, series_type
- 328 )
- 329 # If the cached JSON file is older than threshold_time_sec then load a new
- 330 # JSON dictionary from the provider
- 331 threshold_time_sec = - 1
- 332
- 333 validate_json : bool = True
+ 312 self . auth_data = {}
+ 313 self . authorization = { 'username' : '' , 'password' : '' }
+ 314
+ 315 self . groups = []
+ 316 self . channels = []
+ 317 self . series = []
+ 318 self . movies = []
+ 319 self . movies_30days = []
+ 320 self . movies_7days = []
+ 321
+ 322 self . connection_headers = {}
+ 323
+ 324 self . state = { 'authenticated' : False , 'loaded' : False , 'offline' : False }
+ 325
+ 326 # Used by REST API to get download progress
+ 327 self . download_progress : dict = { 'StreamId' : 0 , 'Total' : 0 , 'Progress' : 0 }
+ 328
+ 329 # get the pyxtream local path
+ 330 self . app_fullpath = osp . dirname ( osp . realpath ( __file__ ))
+ 331
+ 332 # prepare location of local html template
+ 333 self . html_template_folder = osp . join ( self . app_fullpath , "html" )
334
- 335 def __init__ (
- 336 self ,
- 337 provider_name : str ,
- 338 provider_username : str ,
- 339 provider_password : str ,
- 340 provider_url : str ,
- 341 headers : dict = None ,
- 342 hide_adult_content : bool = False ,
- 343 cache_path : str = "" ,
- 344 reload_time_sec : int = 60 * 60 * 8 ,
- 345 validate_json : bool = False ,
- 346 enable_flask : bool = False ,
- 347 debug_flask : bool = True ,
- 348 flask_port : int = 5000
- 349 ):
- 350 """Initialize Xtream Class
- 351
- 352 Args:
- 353 provider_name (str): Name of the IPTV provider
- 354 provider_username (str): User name of the IPTV provider
- 355 provider_password (str): Password of the IPTV provider
- 356 provider_url (str): URL of the IPTV provider
- 357 headers (dict): Requests Headers
- 358 hide_adult_content(bool, optional): When `True` hide stream that are marked for adult
- 359 cache_path (str, optional): Location where to save loaded files.
- 360 Defaults to empty string.
- 361 reload_time_sec (int, optional): Number of seconds before automatic reloading
- 362 (-1 to turn it OFF)
- 363 validate_json (bool, optional): Check Xtream API provided JSON for validity
- 364 enable_flask (bool, optional): Enable Flask
- 365 debug_flask (bool, optional): Enable the debug mode in Flask
- 366 flask_port (int, optional): Flask Port Number
- 367
- 368 Returns: XTream Class Instance
- 369
- 370 - Note 1: If it fails to authorize with provided username and password,
- 371 auth_data will be an empty dictionary.
- 372 - Note 2: The JSON validation option will take considerable amount of time and it should be
- 373 used only as a debug tool. The Xtream API JSON from the provider passes through a
- 374 schema that represent the best available understanding of how the Xtream API
- 375 works.
- 376 """
- 377 self . server = provider_url
- 378 self . username = provider_username
- 379 self . password = provider_password
- 380 self . name = provider_name
- 381 self . cache_path = cache_path
- 382 self . hide_adult_content = hide_adult_content
- 383 self . threshold_time_sec = reload_time_sec
- 384 self . validate_json = validate_json
- 385
- 386 self . auth_data = {}
- 387 self . authorization = { 'username' : '' , 'password' : '' }
- 388
- 389 self . groups = []
- 390 self . channels = []
- 391 self . series = []
- 392 self . movies = []
- 393 self . movies_30days = []
- 394 self . movies_7days = []
- 395
- 396 self . connection_headers = {}
- 397
- 398 self . state = { 'authenticated' : False , 'loaded' : False }
- 399
- 400 # Used by REST API to get download progress
- 401 self . download_progress : dict = { 'StreamId' : 0 , 'Total' : 0 , 'Progress' : 0 }
- 402
- 403 # get the pyxtream local path
- 404 self . app_fullpath = osp . dirname ( osp . realpath ( __file__ ))
- 405
- 406 # prepare location of local html template
- 407 self . html_template_folder = osp . join ( self . app_fullpath , "html" )
- 408
- 409 # if the cache_path is specified, test that it is a directory
- 410 if self . cache_path != "" :
- 411 # If the cache_path is not a directory, clear it
- 412 if not osp . isdir ( self . cache_path ):
- 413 self . printx ( " - Cache Path is not a directory, using default '~/.xtream-cache/'" )
- 414 self . cache_path = ""
- 415
- 416 # If the cache_path is still empty, use default
- 417 if self . cache_path == "" :
- 418 self . cache_path = osp . expanduser ( "~/.xtream-cache/" )
- 419 if not osp . isdir ( self . cache_path ):
- 420 makedirs ( self . cache_path , exist_ok = True )
- 421 self . printx ( f "pyxtream cache path located at { self . cache_path } " )
+ 335 # if the cache_path is specified, test that it is a directory
+ 336 if self . cache_path != "" :
+ 337 # If the cache_path is not a directory, clear it
+ 338 if not osp . isdir ( self . cache_path ):
+ 339 self . printx ( " - Cache Path is not a directory, using default '~/.xtream-cache/'" )
+ 340 self . cache_path = ""
+ 341
+ 342 # If the cache_path is still empty, use default
+ 343 if self . cache_path == "" :
+ 344 self . cache_path = osp . expanduser ( "~/.xtream-cache/" )
+ 345 if not osp . isdir ( self . cache_path ):
+ 346 makedirs ( self . cache_path , exist_ok = True )
+ 347 self . printx ( f "pyxtream cache path located at { self . cache_path } " )
+ 348
+ 349 if headers is not None :
+ 350 self . connection_headers = headers
+ 351 else :
+ 352 self . connection_headers = { 'User-Agent' : "Mozilla/5.0" }
+ 353
+ 354 self . authenticate ()
+ 355
+ 356 if self . state [ 'authenticated' ]:
+ 357 # Show message about Reload Timer configuration
+ 358 if self . threshold_time_sec > 0 :
+ 359 self . printx ( f "Reload timer is ON and set to { self . threshold_time_sec } seconds" )
+ 360 else :
+ 361 self . printx ( "Reload timer is OFF" )
+ 362 # Start Flask Web Interface if enabled
+ 363 if USE_FLASK and enable_flask :
+ 364 self . printx ( "Starting Web Interface" )
+ 365 self . flaskapp = FlaskWrap (
+ 366 self . name , self , self . html_template_folder ,
+ 367 debug = debug_flask , port = flask_port
+ 368 )
+ 369 self . flaskapp . start ()
+ 370 else :
+ 371 self . printx ( "Web interface not running" )
+ 372
+ 373 def printx ( self , msg : str , end = " \n " , flush = True ):
+ 374 """Print a message prefixed with the provider name.
+ 375
+ 376 Useful for logging multiple instances of the XTream class simultaneously.
+ 377
+ 378 Args:
+ 379 msg (str): The message to be printed.
+ 380 end (str, optional): The string appended after the last value. Defaults to "\\n".
+ 381 flush (bool, optional): Whether to forcibly flush the stream. Defaults to True.
+ 382 """
+ 383 print ( f " { self . name } : { msg } " , end = end , flush = flush )
+ 384
+ 385 def get_download_progress ( self , stream_id : int = None ):
+ 386 """Return the current download progress as a JSON string.
+ 387
+ 388 Retrieves the state of the downloader, including total bytes and progress.
+ 389
+ 390 Args:
+ 391 stream_id (int, optional): The specific stream ID to check. Currently unused.
+ 392
+ 393 Returns:
+ 394 str: A JSON-formatted string containing 'StreamId', 'Total', and 'Progress'.
+ 395 """
+ 396 # TODO: Add check for stream specific ID
+ 397 return json . dumps ( self . download_progress )
+ 398
+ 399 def get_last_7days ( self ):
+ 400 """Return movies added in the last 7 days as a JSON string.
+ 401
+ 402 Returns:
+ 403 str: A JSON-formatted list of movies added recently.
+ 404 """
+ 405 return json . dumps ( self . movies_7days , default = lambda x : x . export_json ())
+ 406
+ 407 def get_last_30days ( self ):
+ 408 """Return movies added in the last 30 days as a JSON string.
+ 409
+ 410 Returns:
+ 411 str: A JSON-formatted list of movies added in the last month.
+ 412 """
+ 413 return json . dumps ( self . movies_30days , default = lambda x : x . export_json ())
+ 414
+ 415 def get_state ( self ):
+ 416 """Return the current authentication and loading state as a JSON string.
+ 417
+ 418 Returns:
+ 419 str: A JSON string containing 'authenticated', 'loaded', and 'offline' flags.
+ 420 """
+ 421 return json . dumps ( self . state )
422
- 423 if headers is not None :
- 424 self . connection_headers = headers
- 425 else :
- 426 self . connection_headers = { 'User-Agent' : "Mozilla/5.0" }
- 427
- 428 self . authenticate ()
+ 423 def search_stream ( self , keyword : str ,
+ 424 ignore_case : bool = True ,
+ 425 return_type : str = "LIST" ,
+ 426 stream_type : list = ( "series" , "movies" , "channels" ),
+ 427 added_after : datetime = None ) -> list :
+ 428 """Search for streams across the loaded collection.
429
- 430 if self . state [ 'authenticated' ]:
- 431 # Show message about Reload Timer configuration
- 432 if self . threshold_time_sec > 0 :
- 433 self . printx ( f "Reload timer is ON and set to { self . threshold_time_sec } seconds" )
- 434 else :
- 435 self . printx ( "Reload timer is OFF" )
- 436 # Start Flask Web Interface if enabled
- 437 if USE_FLASK and enable_flask :
- 438 self . printx ( "Starting Web Interface" )
- 439 self . flaskapp = FlaskWrap (
- 440 self . name , self , self . html_template_folder ,
- 441 debug = debug_flask , port = flask_port
- 442 )
- 443 self . flaskapp . start ()
- 444 else :
- 445 self . printx ( "Web interface not running" )
+ 430 Uses regular expressions to find matches in titles across specified stream types.
+ 431
+ 432 Args:
+ 433 keyword (str): The regex pattern or search term.
+ 434 ignore_case (bool, optional): Whether to ignore case in the regex. Defaults to True.
+ 435 return_type (str, optional): The output format, either 'LIST' or 'JSON'. Defaults to "LIST".
+ 436 stream_type (list, optional): Collections to search in. Defaults to ("series", "movies", "channels").
+ 437 added_after (datetime, optional): Filter results added after this date.
+ 438
+ 439 Returns:
+ 440 list: A list of matching items in the requested format (LIST or JSON string).
+ 441 """
+ 442
+ 443 search_result = []
+ 444 regex_flags = re . IGNORECASE if ignore_case else 0
+ 445 regex = re . compile ( keyword , regex_flags )
446
- 447 def printx ( self , msg : str , end = " \n " , flush = True ):
- 448 print ( f " { self . name } : { msg } " , end = end , flush = flush )
- 449
- 450 def get_download_progress ( self , stream_id : int = None ):
- 451 # TODO: Add check for stream specific ID
- 452 return json . dumps ( self . download_progress )
- 453
- 454 def get_last_7days ( self ):
- 455 return json . dumps ( self . movies_7days , default = lambda x : x . export_json ())
- 456
- 457 def get_last_30days ( self ):
- 458 return json . dumps ( self . movies_30days , default = lambda x : x . export_json ())
- 459
- 460 def search_stream ( self , keyword : str ,
- 461 ignore_case : bool = True ,
- 462 return_type : str = "LIST" ,
- 463 stream_type : list = ( "series" , "movies" , "channels" ),
- 464 added_after : datetime = None ) -> list :
- 465 """Search for streams
- 466
- 467 Args:
- 468 keyword (str): Keyword to search for. Supports REGEX
- 469 ignore_case (bool, optional): True to ignore case during search. Defaults to "True".
- 470 return_type (str, optional): Output format, 'LIST' or 'JSON'. Defaults to "LIST".
- 471 stream_type (list, optional): Search within specific stream type.
- 472 added_after (datetime, optional): Search for items that have been added after a certain date.
+ 447 stream_collections = {
+ 448 "movies" : self . movies ,
+ 449 "channels" : self . channels ,
+ 450 "series" : self . series
+ 451 }
+ 452
+ 453 for stream_type_name in stream_type :
+ 454 if stream_type_name in stream_collections :
+ 455 collection = stream_collections [ stream_type_name ]
+ 456 self . printx ( f "Checking { len ( collection ) } { stream_type_name } " )
+ 457 for stream in collection :
+ 458 if stream . name and regex . match ( stream . name ) is not None :
+ 459 if added_after is None :
+ 460 # Add all matches
+ 461 search_result . append ( stream . export_json ())
+ 462 else :
+ 463 # Only add if it is more recent
+ 464 pass
+ 465 else :
+ 466 self . printx ( f "` { stream_type_name } ` not found in collection" )
+ 467
+ 468 if return_type == "JSON" :
+ 469 self . printx ( f "Found { len ( search_result ) } results ` { keyword } `" )
+ 470 return json . dumps ( search_result , ensure_ascii = False )
+ 471
+ 472 return search_result
473
- 474 Returns:
- 475 list: List with all the results, it could be empty.
- 476 """
- 477
- 478 search_result = []
- 479 regex_flags = re . IGNORECASE if ignore_case else 0
- 480 regex = re . compile ( keyword , regex_flags )
+ 474 def download_video ( self , stream_id : int ) -> str :
+ 475 """Download a video stream by its ID and return the local file path.
+ 476
+ 477 Attempts to resolve the stream ID to a movie or series episode and downloads it.
+ 478
+ 479 Args:
+ 480 stream_id (int): The unique ID of the stream to download.
481
- 482 stream_collections = {
- 483 "movies" : self . movies ,
- 484 "channels" : self . channels ,
- 485 "series" : self . series
- 486 }
+ 482 Returns:
+ 483 str: The absolute local path to the downloaded file, or an empty string on failure.
+ 484 """
+ 485 url = ""
+ 486 filename = ""
487
- 488 for stream_type_name in stream_type :
- 489 if stream_type_name in stream_collections :
- 490 collection = stream_collections [ stream_type_name ]
- 491 self . printx ( f "Checking { len ( collection ) } { stream_type_name } " )
- 492 for stream in collection :
- 493 if stream . name and regex . match ( stream . name ) is not None :
- 494 if added_after is None :
- 495 # Add all matches
- 496 search_result . append ( stream . export_json ())
- 497 else :
- 498 # Only add if it is more recent
- 499 pass
- 500 else :
- 501 self . printx ( f "` { stream_type_name } ` not found in collection" )
- 502
- 503 if return_type == "JSON" :
- 504 self . printx ( f "Found { len ( search_result ) } results ` { keyword } `" )
- 505 return json . dumps ( search_result , ensure_ascii = False )
- 506
- 507 return search_result
- 508
- 509 def download_video ( self , stream_type : str , stream_id : int ) -> str :
- 510 """Download Video from Stream ID
+ 488 # Search for the stream_id within series
+ 489 for series_stream in self . series :
+ 490 if series_stream . series_id == stream_id :
+ 491 if series_stream . episodes and "1" in series_stream . episodes :
+ 492 episode_object : Episode = series_stream . episodes [ "1" ]
+ 493 url = f " { series_stream . url } / { episode_object . id } . { episode_object . container_extension } "
+ 494 # Construct a local filename for the episode
+ 495 fn = f " { self . _slugify ( series_stream . name ) } -E1. { episode_object . container_extension } "
+ 496 filename = osp . join ( self . cache_path , fn )
+ 497 break
+ 498
+ 499 # Search for the stream_id within movies (streams) if not found in series
+ 500 if not url :
+ 501 for stream in self . movies :
+ 502 if stream . id == stream_id :
+ 503 url = stream . url
+ 504 fn = f " { self . _slugify ( stream . name ) } . { stream . raw [ 'container_extension' ] } "
+ 505 filename = osp . join ( self . cache_path , fn )
+ 506 break
+ 507
+ 508 # If the url was correctly built and file does not exists, start downloading
+ 509 if url == "" :
+ 510 return ""
511
- 512 Args:
- 513 stream_id (int): String identifying the stream ID
- 514
- 515 Returns:
- 516 str: Absolute Path Filename where the file was saved. Empty string if could not download
- 517 """
- 518 url = ""
- 519 filename = ""
- 520 if stream_type == "series" :
- 521 for series_stream in self . series :
- 522 if series_stream . series_id == stream_id :
- 523 episode_object : Episode = series_stream . episodes [ "1" ]
- 524 url = f " { series_stream . url } / { episode_object . id } ." \
- 525 f " { episode_object . container_extension } "
+ 512 for attempt in range ( 10 ):
+ 513 if self . _download_video_impl ( url , filename ):
+ 514 return filename
+ 515
+ 516 return ""
+ 517
+ 518 def _download_video_impl ( self , url : str , fullpath_filename : str ) -> bool :
+ 519 """Internal implementation for downloading a stream.
+ 520
+ 521 Handles chunked downloading, progress updates, and resumable transfers via Range headers.
+ 522
+ 523 Args:
+ 524 url (str): The direct URL of the video stream.
+ 525 fullpath_filename (str): The local destination path.
526
- 527 if stream_type == "movie" :
- 528 for stream in self . movies :
- 529 if stream . id == stream_id :
- 530 url = stream . url
- 531 fn = f " { self . _slugify ( stream . name ) } . { stream . raw [ 'container_extension' ] } "
- 532 filename = osp . join ( self . cache_path , fn )
- 533
- 534 # If the url was correctly built and file does not exists, start downloading
- 535 if url == "" :
- 536 return ""
- 537
- 538 for attempt in range ( 10 ):
- 539 if self . _download_video_impl ( url , filename ):
- 540 return filename
- 541
- 542 return ""
- 543
- 544 def _download_video_impl ( self , url : str , fullpath_filename : str ) -> bool :
- 545 """Download a stream
+ 527 Returns:
+ 528 bool: True if the download completed successfully, False otherwise.
+ 529 """
+ 530 ret_code = False
+ 531 mb_size = MB_FACTOR
+ 532 headers = self . connection_headers . copy ()
+ 533 try :
+ 534 self . printx ( f "Downloading from URL ` { url } ` and saving at ` { fullpath_filename } `" )
+ 535
+ 536 # Check if the file already exists
+ 537 if osp . exists ( fullpath_filename ):
+ 538 # If the file exists, resume the download from where it left off
+ 539 file_size = osp . getsize ( fullpath_filename )
+ 540 headers [ 'Range' ] = f 'bytes= { file_size } -'
+ 541 mode = 'ab' # Append to the existing file
+ 542 self . printx ( f "Resuming from { file_size : _ } bytes" )
+ 543 else :
+ 544 # If the file does not exist, start a new download
+ 545 mode = 'wb' # Write a new file
546
- 547 Args:
- 548 url (str): Complete URL of the stream
- 549 fullpath_filename (str): Complete File path where to save the stream
- 550
- 551 Returns:
- 552 bool: True if successful, False if error
- 553 """
- 554 ret_code = False
- 555 mb_size = 1024 * 1024
- 556 headers = self . connection_headers . copy ()
- 557 try :
- 558 self . printx ( f "Downloading from URL ` { url } ` and saving at ` { fullpath_filename } `" )
- 559
- 560 # Check if the file already exists
- 561 if osp . exists ( fullpath_filename ):
- 562 # If the file exists, resume the download from where it left off
- 563 file_size = osp . getsize ( fullpath_filename )
- 564 headers [ 'Range' ] = f 'bytes= { file_size } -'
- 565 mode = 'ab' # Append to the existing file
- 566 self . printx ( f "Resuming from { file_size : _ } bytes" )
- 567 else :
- 568 # If the file does not exist, start a new download
- 569 mode = 'wb' # Write a new file
+ 547 # Make the request to download
+ 548 response = requests . get (
+ 549 url , timeout = ( DOWNLOAD_TIMEOUT_SEC ),
+ 550 stream = True ,
+ 551 allow_redirects = True ,
+ 552 headers = headers
+ 553 )
+ 554 # If there is an answer from the remote server
+ 555 if response . status_code in ( 200 , 206 ):
+ 556 # Get content type Binary or Text
+ 557 content_type = response . headers . get ( 'content-type' , None )
+ 558
+ 559 # Get total playlist byte size
+ 560 total_content_size = int ( response . headers . get ( 'content-length' , None ))
+ 561 total_content_size_mb = total_content_size / mb_size
+ 562
+ 563 # Set downloaded size
+ 564 downloaded_bytes = 0
+ 565 self . download_progress [ 'Total' ] = total_content_size
+ 566 self . download_progress [ 'Progress' ] = 0
+ 567
+ 568 # Set stream blocks
+ 569 block_bytes = int ( DOWNLOAD_BLOCK_SIZE )
570
- 571 # Make the request to download
- 572 response = requests . get (
- 573 url , timeout = ( 10 ),
- 574 stream = True ,
- 575 allow_redirects = True ,
- 576 headers = headers
- 577 )
- 578 # If there is an answer from the remote server
- 579 if response . status_code in ( 200 , 206 ):
- 580 # Get content type Binary or Text
- 581 content_type = response . headers . get ( 'content-type' , None )
+ 571 self . printx ( f "Ready to download { total_content_size_mb : .1f } "
+ 572 f "MB file ( { total_content_size } )"
+ 573 )
+ 574 if content_type . split ( '/' )[ 0 ] != "text" :
+ 575 with open ( fullpath_filename , mode ) as file :
+ 576
+ 577 # Grab data by block_bytes
+ 578 for data in response . iter_content ( block_bytes , decode_unicode = False ):
+ 579 downloaded_bytes += block_bytes
+ 580 self . download_progress [ 'Progress' ] = downloaded_bytes
+ 581 file . write ( data )
582
- 583 # Get total playlist byte size
- 584 total_content_size = int ( response . headers . get ( 'content-length' , None ))
- 585 total_content_size_mb = total_content_size / mb_size
- 586
- 587 # Set downloaded size
- 588 downloaded_bytes = 0
- 589 self . download_progress [ 'Total' ] = total_content_size
- 590 self . download_progress [ 'Progress' ] = 0
- 591
- 592 # Set stream blocks
- 593 block_bytes = int ( 4 * mb_size ) # 4 MB
- 594
- 595 self . printx ( f "Ready to download { total_content_size_mb : .1f } "
- 596 f "MB file ( { total_content_size } )"
- 597 )
- 598 if content_type . split ( '/' )[ 0 ] != "text" :
- 599 with open ( fullpath_filename , mode ) as file :
- 600
- 601 # Grab data by block_bytes
- 602 for data in response . iter_content ( block_bytes , decode_unicode = False ):
- 603 downloaded_bytes += block_bytes
- 604 self . download_progress [ 'Progress' ] = downloaded_bytes
- 605 file . write ( data )
+ 583 ret_code = True
+ 584 else :
+ 585 self . printx ( f "URL has a file with unexpected content-type { content_type } " )
+ 586 else :
+ 587 self . printx ( f "HTTP error { response . status_code } while retrieving from { url } " )
+ 588 except requests . exceptions . ReadTimeout :
+ 589 self . printx ( "Read Timeout, try again" )
+ 590 except Exception as e :
+ 591 self . printx ( "Unknown error" )
+ 592 self . printx ( e )
+ 593
+ 594 return ret_code
+ 595
+ 596 def _slugify ( self , string : str ) -> str :
+ 597 """Convert a string to a safe filename format.
+ 598
+ 599 Args:
+ 600 string (str): Input string.
+ 601
+ 602 Returns:
+ 603 str: A lowercase, sanitized string.
+ 604 """
+ 605 return "" . join ( x . lower () for x in string if x . isprintable ())
606
- 607 ret_code = True
- 608 else :
- 609 self . printx ( f "URL has a file with unexpected content-type { content_type } " )
- 610 else :
- 611 self . printx ( f "HTTP error { response . status_code } while retrieving from { url } " )
- 612 except requests . exceptions . ReadTimeout :
- 613 self . printx ( "Read Timeout, try again" )
- 614 except Exception as e :
- 615 self . printx ( "Unknown error" )
- 616 self . printx ( e )
- 617
- 618 return ret_code
- 619
- 620 def _slugify ( self , string : str ) -> str :
- 621 """Normalize string
- 622
- 623 Normalizes string, converts to lowercase, removes non-alpha characters,
- 624 and converts spaces to hyphens.
+ 607 def _validate_url ( self , url : str ) -> bool :
+ 608 """Check if a URL string has a valid format.
+ 609
+ 610 Args:
+ 611 url (str): The URL to validate.
+ 612
+ 613 Returns:
+ 614 bool: True if valid, False otherwise.
+ 615 """
+ 616 regex = re . compile (
+ 617 r "^(?:http|ftp)s?://" # http:// or https://
+ 618 r "(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|" # domain...
+ 619 r "localhost|" # localhost...
+ 620 r "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" # ...or ip
+ 621 r "(?::\d+)?" # optional port
+ 622 r "(?:/?|[/?]\S+)$" ,
+ 623 re . IGNORECASE ,
+ 624 )
625
- 626 Args:
- 627 string (str): String to be normalized
- 628
- 629 Returns:
- 630 str: Normalized String
- 631 """
- 632 return "" . join ( x . lower () for x in string if x . isprintable ())
+ 626 return re . match ( regex , url ) is not None
+ 627
+ 628 def _get_logo_local_path ( self , logo_url : str ) -> str :
+ 629 """Generate a local cache path for a stream logo URL.
+ 630
+ 631 Args:
+ 632 logo_url (str): The remote URL of the logo.
633
- 634 def _validate_url ( self , url : str ) -> bool :
- 635 regex = re . compile (
- 636 r "^(?:http|ftp)s?://" # http:// or https://
- 637 r "(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|" # domain...
- 638 r "localhost|" # localhost...
- 639 r "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" # ...or ip
- 640 r "(?::\d+)?" # optional port
- 641 r "(?:/?|[/?]\S+)$" ,
- 642 re . IGNORECASE ,
- 643 )
- 644
- 645 return re . match ( regex , url ) is not None
- 646
- 647 def _get_logo_local_path ( self , logo_url : str ) -> str :
- 648 """Convert the Logo URL to a local Logo Path
- 649
- 650 Args:
- 651 logoURL (str): The Logo URL
- 652
- 653 Returns:
- 654 [type]: The logo path as a string or None
+ 634 Returns:
+ 635 str: The local file path where the logo should be cached.
+ 636 """
+ 637 local_logo_path = None
+ 638 if logo_url is not None :
+ 639 if not self . _validate_url ( logo_url ):
+ 640 logo_url = None
+ 641 else :
+ 642 local_logo_path = osp . join (
+ 643 self . cache_path ,
+ 644 f " { self . _slugify ( self . name ) } - { self . _slugify ( osp . split ( logo_url )[ - 1 ]) } "
+ 645 )
+ 646 return local_logo_path
+ 647
+ 648 def authenticate ( self ):
+ 649 """Authenticate with the provider and initialize base URLs.
+ 650
+ 651 Attempts to log in using the player_api.php endpoint. On failure, it triggers
+ 652 the offline fallback mechanism if a local cache exists.
+ 653
+ 654 Sets the authentication state and base URLs for subsequent API calls.
655 """
- 656 local_logo_path = None
- 657 if logo_url is not None :
- 658 if not self . _validate_url ( logo_url ):
- 659 logo_url = None
- 660 else :
- 661 local_logo_path = osp . join (
- 662 self . cache_path ,
- 663 f " { self . _slugify ( self . name ) } - { self . _slugify ( osp . split ( logo_url )[ - 1 ]) } "
- 664 )
- 665 return local_logo_path
- 666
- 667 def authenticate ( self ):
- 668 """Login to provider"""
- 669 # If we have not yet successfully authenticated, attempt authentication
- 670 if self . state [ "authenticated" ] is False :
- 671 # Erase any previous data
- 672 self . auth_data = {}
- 673 # Loop through 30 seconds
- 674 i = 0
- 675 r = None
- 676 # Prepare the authentication url
- 677 url = f " { self . server } /player_api.php?username= { self . username } &password= { self . password } "
- 678 self . printx ( "Attempting connection... " , end = '' )
- 679 while i < 30 :
- 680 try :
- 681 # Request authentication, wait 4 seconds maximum
- 682 r = requests . get ( url , timeout = ( 4 ), headers = self . connection_headers )
- 683 i = 31
- 684 except ( requests . exceptions . ConnectionError , requests . exceptions . ReadTimeout ):
- 685 time . sleep ( 1 )
- 686 print ( f " { i } " , end = '' , flush = True )
- 687 i += 1
- 688
- 689 if r is not None :
- 690 # If the answer is ok, process data and change state
- 691 if r . ok :
- 692 print ( "Connected" )
- 693 self . auth_data = r . json ()
- 694 self . authorization = {
- 695 "username" : self . auth_data [ "user_info" ][ "username" ],
- 696 "password" : self . auth_data [ "user_info" ][ "password" ]
- 697 }
- 698 # Account expiration date
- 699 self . account_expiration = timedelta (
- 700 seconds = (
- 701 int ( self . auth_data [ "user_info" ][ "exp_date" ]) - datetime . now ( timezone . utc ) . timestamp ()
- 702 )
- 703 )
- 704 # Mark connection authorized
- 705 self . state [ "authenticated" ] = True
- 706 # Construct the base url for all requests
- 707 self . base_url = f " { self . server } /player_api.php?username= { self . username } &password= { self . password } "
- 708 # If there is a secure server connection, construct the base url SSL for all requests
- 709 if "https_port" in self . auth_data [ "server_info" ]:
- 710 self . base_url_ssl = f "https:// { self . auth_data [ 'server_info' ][ 'url' ] } : { self . auth_data [ 'server_info' ][ 'https_port' ] } " \
- 711 f "/player_api.php?username= { self . username } &password= { self . password } "
- 712 self . printx ( f "Account expires in { str ( self . account_expiration ) } " )
- 713 else :
- 714 print ( "" )
- 715 self . printx ( f "Provider ` { self . name } ` could not be loaded. Reason: ` { r . status_code } { r . reason } `" )
- 716 else :
- 717 self . printx ( f " \n { self . name } : Provider refused the connection" )
- 718
- 719 def _load_from_file ( self , filename ) -> dict :
- 720 """Try to load the dictionary from file
- 721
- 722 Args:
- 723 filename ([type]): File name containing the data
- 724
- 725 Returns:
- 726 dict: Dictionary if found and no errors, None if file does not exists
- 727 """
- 728 # Build the full path
- 729 full_filename = osp . join ( self . cache_path , f " { self . _slugify ( self . name ) } - { filename } " )
- 730
- 731 # If the cached file exists, attempt to load it
- 732 if osp . isfile ( full_filename ):
- 733
- 734 my_data = None
- 735
- 736 # Get the elapsed seconds since last file update
- 737 file_age_sec = time . time () - osp . getmtime ( full_filename )
- 738 # If the file was updated less than the threshold time,
- 739 # it means that the file is still fresh, we can load it.
- 740 # Otherwise skip and return None to force a re-download
- 741 if self . threshold_time_sec > file_age_sec :
- 742 # Load the JSON data
- 743 try :
- 744 with open ( full_filename , mode = "r" , encoding = "utf-8" ) as myfile :
- 745 my_data = json . load ( myfile )
- 746 if len ( my_data ) == 0 :
- 747 my_data = None
- 748 except Exception as e :
- 749 self . printx ( f " - Could not load from file ` { full_filename } `: e=` { e } `" )
- 750 return my_data
- 751
- 752 return None
- 753
- 754 def _save_to_file ( self , data_list : dict , filename : str ) -> bool :
- 755 """Save a dictionary to file
- 756
- 757 This function will overwrite the file if already exists
- 758
- 759 Args:
- 760 data_list (dict): Dictionary to save
- 761 filename (str): Name of the file
- 762
- 763 Returns:
- 764 bool: True if successful, False if error
- 765 """
- 766 if data_list is None :
- 767 return False
- 768
- 769 full_filename = osp . join ( self . cache_path , f " { self . _slugify ( self . name ) } - { filename } " )
- 770 try :
- 771 with open ( full_filename , mode = "wt" , encoding = "utf-8" ) as file :
- 772 json . dump ( data_list , file , ensure_ascii = False )
- 773 return True
- 774 except Exception as e :
- 775 self . printx ( f " - Could not save to file ` { full_filename } `: e=` { e } `" )
- 776 return False
- 777
- 778 def load_iptv ( self ) -> bool :
- 779 """Load XTream IPTV
- 780
- 781 - Add all Live TV to XTream.channels
- 782 - Add all VOD to XTream.movies
- 783 - Add all Series to XTream.series
- 784 Series contains Seasons and Episodes. Those are not automatically
- 785 retrieved from the server to reduce the loading time.
- 786 - Add all groups to XTream.groups
- 787 Groups are for all three channel types, Live TV, VOD, and Series
- 788
- 789 Returns:
- 790 bool: True if successful, False if error
- 791 """
- 792 # If pyxtream has not authenticated the connection, return empty
- 793 if self . state [ "authenticated" ] is False :
- 794 self . printx ( "Warning, cannot load steams since authorization failed" )
- 795 return False
- 796
- 797 # If pyxtream has already loaded the data, skip and return success
- 798 if self . state [ "loaded" ] is True :
- 799 self . printx ( "Warning, data has already been loaded." )
- 800 return True
+ 656 # If we have not yet successfully authenticated, attempt authentication
+ 657 if self . state [ "authenticated" ] is False :
+ 658 # Erase any previous data
+ 659 self . auth_data = {}
+ 660 # Loop through 30 seconds
+ 661 i = 0
+ 662 r = None
+ 663 # Prepare the authentication url
+ 664 url = f " { self . server } /player_api.php?username= { self . username } &password= { self . password } "
+ 665 self . printx ( "Attempting connection... " , end = '' )
+ 666 while i < AUTH_MAX_ATTEMPTS :
+ 667 try :
+ 668 # Request authentication, wait AUTH_TIMEOUT_SEC seconds maximum
+ 669 r = requests . get ( url , timeout = ( AUTH_TIMEOUT_SEC ), headers = self . connection_headers )
+ 670 if r . ok :
+ 671 i = AUTH_LOOP_EXIT_VALUE
+ 672 else :
+ 673 i += 1
+ 674 except ( requests . exceptions . ConnectionError , requests . exceptions . ReadTimeout ):
+ 675 time . sleep ( 1 )
+ 676 print ( f " { i } " , end = '' , flush = True )
+ 677 i += 1
+ 678
+ 679 if r is not None :
+ 680 # If the answer is ok, process data and change state
+ 681 if r . ok :
+ 682 print ( "Connected" )
+ 683 self . auth_data = r . json ()
+ 684 self . authorization = {
+ 685 "username" : self . auth_data [ "user_info" ][ "username" ],
+ 686 "password" : self . auth_data [ "user_info" ][ "password" ]
+ 687 }
+ 688 # Account expiration date
+ 689 self . account_expiration = timedelta (
+ 690 seconds = (
+ 691 int ( self . auth_data [ "user_info" ][ "exp_date" ]) - datetime . now ( timezone . utc ) . timestamp ()
+ 692 )
+ 693 )
+ 694 # Mark connection authorized
+ 695 self . state [ "authenticated" ] = True
+ 696 # Construct the base url for all requests
+ 697 self . base_url = f " { self . server } /player_api.php?username= { self . username } &password= { self . password } "
+ 698 # If there is a secure server connection, construct the base url SSL for all requests
+ 699 if "https_port" in self . auth_data [ "server_info" ]:
+ 700 self . base_url_ssl = f "https:// { self . auth_data [ 'server_info' ][ 'url' ] } : { self . auth_data [ 'server_info' ][ 'https_port' ] } " \
+ 701 f "/player_api.php?username= { self . username } &password= { self . password } "
+ 702 self . printx ( f "Account expires in { str ( self . account_expiration ) } " )
+ 703 else :
+ 704 print ( "" )
+ 705 self . printx ( f "Provider ` { self . name } ` could not be loaded. Reason: ` { r . status_code } { r . reason } `" )
+ 706 self . _fallback_to_offline ()
+ 707 else :
+ 708 self . printx ( f " \n { self . name } : Provider refused the connection" )
+ 709 self . _fallback_to_offline ()
+ 710
+ 711 def _fallback_to_offline ( self ):
+ 712 """Check for local cache and enter offline mode if available"""
+ 713 cache_exists = False
+ 714 for stream_type in ( self . live_type , self . vod_type , self . series_type ):
+ 715 filename = f "all_groups_ { stream_type } .json"
+ 716 full_filename = osp . join ( self . cache_path , f " { self . _slugify ( self . name ) } - { filename } " )
+ 717 if osp . isfile ( full_filename ):
+ 718 cache_exists = True
+ 719 break
+ 720
+ 721 if cache_exists :
+ 722 self . printx ( "Offline mode active: Using local cache fallback" )
+ 723 self . state [ "offline" ] = True
+ 724 self . authorization = {
+ 725 "username" : self . username ,
+ 726 "password" : self . password
+ 727 }
+ 728 self . auth_data = {
+ 729 "user_info" : {
+ 730 "username" : self . username ,
+ 731 "password" : self . password ,
+ 732 "exp_date" : str ( int ( datetime . now ( timezone . utc ) . timestamp () + SECONDS_IN_YEAR ))
+ 733 },
+ 734 "server_info" : { "url" : self . server }
+ 735 }
+ 736 self . base_url = f " { self . server } /player_api.php?username= { self . username } &password= { self . password } "
+ 737 self . state [ "authenticated" ] = True
+ 738 else :
+ 739 self . printx ( "No local cache available." )
+ 740
+ 741 def _load_from_file ( self , filename ) -> dict :
+ 742 """Try to load the dictionary from file
+ 743
+ 744 Args:
+ 745 filename ([type]): File name containing the data
+ 746
+ 747 Returns:
+ 748 dict: Dictionary if found and no errors, None if file does not exists
+ 749 """
+ 750 # Build the full path
+ 751 full_filename = osp . join ( self . cache_path , f " { self . _slugify ( self . name ) } - { filename } " )
+ 752
+ 753 # If the cached file exists, attempt to load it
+ 754 if osp . isfile ( full_filename ):
+ 755
+ 756 my_data = None
+ 757
+ 758 # Get the elapsed seconds since last file update
+ 759 file_age_sec = time . time () - osp . getmtime ( full_filename )
+ 760 # If the file was updated less than the threshold time,
+ 761 # it means that the file is still fresh, we can load it.
+ 762 # If threshold is > SECONDS_IN_DAY, we force load from file regardless of age.
+ 763 # Otherwise skip and return None to force a re-download
+ 764 if self . state [ 'offline' ] or self . threshold_time_sec > SECONDS_IN_DAY or self . threshold_time_sec > file_age_sec :
+ 765 # Load the JSON data
+ 766 try :
+ 767 with open ( full_filename , mode = "r" , encoding = "utf-8" ) as myfile :
+ 768 my_data = json . load ( myfile )
+ 769 if len ( my_data ) == 0 :
+ 770 my_data = None
+ 771 except Exception as e :
+ 772 self . printx ( f " - Could not load from file ` { full_filename } `: e=` { e } `" )
+ 773 return my_data
+ 774
+ 775 return None
+ 776
+ 777 def _save_to_file ( self , data_list : dict , filename : str ) -> bool :
+ 778 """Save a dictionary as a JSON file in the local cache.
+ 779
+ 780 Args:
+ 781 data_list (dict): Data to be persisted.
+ 782 filename (str): Local filename.
+ 783
+ 784 Returns:
+ 785 bool: True if saving was successful.
+ 786 """
+ 787 if data_list is None :
+ 788 return False
+ 789
+ 790 full_filename = osp . join ( self . cache_path , f " { self . _slugify ( self . name ) } - { filename } " )
+ 791 try :
+ 792 with open ( full_filename , mode = "wt" , encoding = "utf-8" ) as file :
+ 793 json . dump ( data_list , file , ensure_ascii = False )
+ 794 return True
+ 795 except Exception as e :
+ 796 self . printx ( f " - Could not save to file ` { full_filename } `: e=` { e } `" )
+ 797 return False
+ 798
+ 799 def load_iptv ( self ) -> bool :
+ 800 """Orchestrates the loading and processing of all IPTV content.
801
- 802 # Delete skipped channels from cache
- 803 full_filename = osp . join ( self . cache_path , "skipped_streams.json" )
- 804 try :
- 805 with open ( full_filename , mode = "r+" , encoding = "utf-8" ) as f :
- 806 f . truncate ( 0 )
- 807 f . close ()
- 808 except FileNotFoundError :
- 809 pass
- 810
- 811 for loading_stream_type in ( self . live_type , self . vod_type , self . series_type ):
- 812 # Get GROUPS
- 813
- 814 # Try loading local file
- 815 dt = 0
- 816 start = timer ()
- 817 all_cat = self . _load_from_file ( f "all_groups_ { loading_stream_type } .json" )
- 818 # If file empty or does not exists, download it from remote
- 819 if all_cat is None :
- 820 # Load all Groups and save file locally
- 821 all_cat = self . _load_categories_from_provider ( loading_stream_type )
- 822 if all_cat is not None :
- 823 self . _save_to_file ( all_cat , f "all_groups_ { loading_stream_type } .json" )
- 824 dt = timer () - start
- 825
- 826 # If we got the GROUPS data, show the statistics and load GROUPS
- 827 if all_cat is not None :
- 828 self . printx ( f "Loaded { len ( all_cat ) } { loading_stream_type } Groups in { dt : .3f } seconds" )
- 829 # Add GROUPS to dictionaries
- 830
- 831 # Add the catch-all-errors group
- 832 if loading_stream_type == self . live_type :
- 833 self . groups . append ( self . live_catch_all_group )
- 834 elif loading_stream_type == self . vod_type :
- 835 self . groups . append ( self . vod_catch_all_group )
- 836 elif loading_stream_type == self . series_type :
- 837 self . groups . append ( self . series_catch_all_group )
- 838
- 839 for cat_obj in all_cat :
- 840 if schemaValidator ( cat_obj , SchemaType . GROUP ):
- 841 # Create Group (Category)
- 842 new_group = Group ( cat_obj , loading_stream_type )
- 843 # Add to xtream class
- 844 self . groups . append ( new_group )
- 845 else :
- 846 # Save what did not pass schema validation
- 847 print ( cat_obj )
- 848
- 849 # Sort Categories
- 850 self . groups . sort ( key = lambda x : x . name )
- 851 else :
- 852 self . printx ( f " - Could not load { loading_stream_type } Groups" )
- 853 break
+ 802 Iterates through Live, VOD, and Series types. Loads categories and streams
+ 803 from the local cache if available and fresh, or fetches them from the provider.
+ 804
+ 805 Returns:
+ 806 bool: True if the loading cycle completed successfully.
+ 807 """
+ 808 # If pyxtream has not authenticated the connection, return empty
+ 809 if self . state [ "authenticated" ] is False :
+ 810 self . printx ( "Warning, cannot load steams since authorization failed" )
+ 811 return False
+ 812
+ 813 # If pyxtream has already loaded the data, skip and return success
+ 814 if self . state [ "loaded" ] is True :
+ 815 self . printx ( "Warning, data has already been loaded." )
+ 816 return True
+ 817
+ 818 # Delete skipped channels from cache
+ 819 full_filename = osp . join ( self . cache_path , "skipped_streams.json" )
+ 820 try :
+ 821 with open ( full_filename , mode = "r+" , encoding = "utf-8" ) as f :
+ 822 f . truncate ( 0 )
+ 823 f . close ()
+ 824 except FileNotFoundError :
+ 825 pass
+ 826
+ 827 for loading_stream_type in ( self . live_type , self . vod_type , self . series_type ):
+ 828 # Get GROUPS
+ 829
+ 830 # Try loading local file
+ 831 dt = 0
+ 832 start = timer ()
+ 833 all_cat = self . _load_from_file ( f "all_groups_ { loading_stream_type } .json" )
+ 834 # If file empty or does not exists, download it from remote
+ 835 if all_cat is None :
+ 836 # Load all Groups and save file locally
+ 837 all_cat = self . _load_categories_from_provider ( loading_stream_type )
+ 838 if all_cat is not None :
+ 839 self . _save_to_file ( all_cat , f "all_groups_ { loading_stream_type } .json" )
+ 840 dt = timer () - start
+ 841
+ 842 # If we got the GROUPS data, show the statistics and load GROUPS
+ 843 if all_cat is not None :
+ 844 self . printx ( f "Loaded { len ( all_cat ) } { loading_stream_type } Groups in { dt : .3f } seconds" )
+ 845 # Add GROUPS to dictionaries
+ 846
+ 847 # Add the catch-all-errors group
+ 848 if loading_stream_type == self . live_type :
+ 849 self . groups . append ( self . live_catch_all_group )
+ 850 elif loading_stream_type == self . vod_type :
+ 851 self . groups . append ( self . vod_catch_all_group )
+ 852 elif loading_stream_type == self . series_type :
+ 853 self . groups . append ( self . series_catch_all_group )
854
- 855 # Get Streams
- 856
- 857 # Try loading local file
- 858 dt = 0
- 859 start = timer ()
- 860 all_streams = self . _load_from_file ( f "all_stream_ { loading_stream_type } .json" )
- 861 # If file empty or does not exists, download it from remote
- 862 if all_streams is None :
- 863 # Load all Streams and save file locally
- 864 all_streams = self . _load_streams_from_provider ( loading_stream_type )
- 865 self . _save_to_file ( all_streams , f "all_stream_ { loading_stream_type } .json" )
- 866 dt = timer () - start
- 867
- 868 # If we got the STREAMS data, show the statistics and load Streams
- 869 if all_streams is not None :
- 870 self . printx ( f "Loaded { len ( all_streams ) } { loading_stream_type } Streams in { dt : .3f } seconds" )
- 871 # Add Streams to dictionaries
+ 855 for cat_obj in all_cat :
+ 856 if schemaValidator ( cat_obj , SchemaType . GROUP ):
+ 857 # Create Group (Category)
+ 858 new_group = Group ( cat_obj , loading_stream_type )
+ 859 # Add to xtream class
+ 860 self . groups . append ( new_group )
+ 861 else :
+ 862 # Save what did not pass schema validation
+ 863 print ( cat_obj )
+ 864
+ 865 # Sort Categories
+ 866 self . groups . sort ( key = lambda x : x . name )
+ 867 else :
+ 868 self . printx ( f " - Could not load { loading_stream_type } Groups" )
+ 869 break
+ 870
+ 871 # Get Streams
872
- 873 skipped_adult_content = 0
- 874 skipped_no_name_content = 0
- 875
- 876 self . printx ( f "Processing { loading_stream_type } Streams..." )
- 877
- 878 start = timer ()
- 879 for stream_channel in all_streams :
- 880 skip_stream = False
- 881
- 882 # Validate JSON scheme
- 883 if self . validate_json :
- 884 if loading_stream_type == self . series_type :
- 885 if not schemaValidator ( stream_channel , SchemaType . SERIES_INFO ):
- 886 self . printx ( stream_channel )
- 887 elif loading_stream_type == self . live_type :
- 888 if not schemaValidator ( stream_channel , SchemaType . LIVE ):
- 889 self . printx ( stream_channel )
- 890 else :
- 891 # vod_type
- 892 if not schemaValidator ( stream_channel , SchemaType . VOD ):
- 893 self . printx ( stream_channel )
- 894
- 895 # Skip if the name of the stream is empty
- 896 if stream_channel [ "name" ] == "" :
- 897 skip_stream = True
- 898 skipped_no_name_content = skipped_no_name_content + 1
- 899 self . _save_to_file_skipped_streams ( stream_channel )
- 900
- 901 # Skip if the user chose to hide adult streams
- 902 if self . hide_adult_content and loading_stream_type == self . live_type :
- 903 if "is_adult" in stream_channel :
- 904 if stream_channel [ "is_adult" ] == "1" :
- 905 skip_stream = True
- 906 skipped_adult_content = skipped_adult_content + 1
- 907 self . _save_to_file_skipped_streams ( stream_channel )
- 908
- 909 if not skip_stream :
- 910 # Some channels have no group,
- 911 # so let's add them to the catch all group
- 912 if not stream_channel [ "category_id" ]:
- 913 stream_channel [ "category_id" ] = "9999"
- 914 elif stream_channel [ "category_id" ] != "1" :
- 915 pass
+ 873 # Try loading local file
+ 874 dt = 0
+ 875 start = timer ()
+ 876 all_streams = self . _load_from_file ( f "all_stream_ { loading_stream_type } .json" )
+ 877 # If file empty or does not exists, download it from remote
+ 878 if all_streams is None :
+ 879 # Load all Streams and save file locally
+ 880 all_streams = self . _load_streams_from_provider ( loading_stream_type )
+ 881 self . _save_to_file ( all_streams , f "all_stream_ { loading_stream_type } .json" )
+ 882 dt = timer () - start
+ 883
+ 884 # If we got the STREAMS data, show the statistics and load Streams
+ 885 if all_streams is not None :
+ 886 self . printx ( f "Loaded { len ( all_streams ) } { loading_stream_type } Streams in { dt : .3f } seconds" )
+ 887 # Add Streams to dictionaries
+ 888
+ 889 skipped_adult_content = 0
+ 890 skipped_no_name_content = 0
+ 891
+ 892 self . printx ( f "Processing { loading_stream_type } Streams..." )
+ 893
+ 894 start = timer ()
+ 895 for stream_channel in all_streams :
+ 896 skip_stream = False
+ 897
+ 898 # Validate JSON scheme
+ 899 if self . validate_json :
+ 900 if loading_stream_type == self . series_type :
+ 901 if not schemaValidator ( stream_channel , SchemaType . SERIES_INFO ):
+ 902 self . printx ( stream_channel )
+ 903 elif loading_stream_type == self . live_type :
+ 904 if not schemaValidator ( stream_channel , SchemaType . LIVE ):
+ 905 self . printx ( stream_channel )
+ 906 else :
+ 907 # vod_type
+ 908 if not schemaValidator ( stream_channel , SchemaType . VOD ):
+ 909 self . printx ( stream_channel )
+ 910
+ 911 # Skip if the name of the stream is empty
+ 912 if stream_channel [ "name" ] == "" :
+ 913 skip_stream = True
+ 914 skipped_no_name_content = skipped_no_name_content + 1
+ 915 self . _save_to_file_skipped_streams ( stream_channel )
916
- 917 # Find the first occurrence of the group that the
- 918 # Channel or Stream is pointing to
- 919 the_group = next (
- 920 ( x for x in self . groups if x . group_id == int ( stream_channel [ "category_id" ])),
- 921 None
- 922 )
- 923
- 924 # Set group title
- 925 if the_group is not None :
- 926 group_title = the_group . name
- 927 else :
- 928 if loading_stream_type == self . live_type :
- 929 group_title = self . live_catch_all_group . name
- 930 the_group = self . live_catch_all_group
- 931 elif loading_stream_type == self . vod_type :
- 932 group_title = self . vod_catch_all_group . name
- 933 the_group = self . vod_catch_all_group
- 934 elif loading_stream_type == self . series_type :
- 935 group_title = self . series_catch_all_group . name
- 936 the_group = self . series_catch_all_group
- 937
- 938 if loading_stream_type == self . series_type :
- 939 # Load all Series
- 940 new_series = Serie ( self , stream_channel )
- 941 # To get all the Episodes for every Season of each
- 942 # Series is very time consuming, we will only
- 943 # populate the Series once the user click on the
- 944 # Series, the Seasons and Episodes will be loaded
- 945 # using x.getSeriesInfoByID() function
- 946
- 947 else :
- 948 new_channel = Channel (
- 949 self ,
- 950 group_title ,
- 951 stream_channel
- 952 )
+ 917 # Skip if the user chose to hide adult streams
+ 918 if self . hide_adult_content and loading_stream_type == self . live_type :
+ 919 if "is_adult" in stream_channel :
+ 920 if stream_channel [ "is_adult" ] == "1" :
+ 921 skip_stream = True
+ 922 skipped_adult_content = skipped_adult_content + 1
+ 923 self . _save_to_file_skipped_streams ( stream_channel )
+ 924
+ 925 if not skip_stream :
+ 926 # Some channels have no group,
+ 927 # so let's add them to the catch all group
+ 928 if not stream_channel [ "category_id" ]:
+ 929 stream_channel [ "category_id" ] = str ( CATCH_ALL_CATEGORY_ID )
+ 930 elif stream_channel [ "category_id" ] != "1" :
+ 931 pass
+ 932
+ 933 # Find the first occurrence of the group that the
+ 934 # Channel or Stream is pointing to
+ 935 the_group = next (
+ 936 ( x for x in self . groups if x . group_id == int ( stream_channel [ "category_id" ])),
+ 937 None
+ 938 )
+ 939
+ 940 # Set group title
+ 941 if the_group is not None :
+ 942 group_title = the_group . name
+ 943 else :
+ 944 if loading_stream_type == self . live_type :
+ 945 group_title = self . live_catch_all_group . name
+ 946 the_group = self . live_catch_all_group
+ 947 elif loading_stream_type == self . vod_type :
+ 948 group_title = self . vod_catch_all_group . name
+ 949 the_group = self . vod_catch_all_group
+ 950 elif loading_stream_type == self . series_type :
+ 951 group_title = self . series_catch_all_group . name
+ 952 the_group = self . series_catch_all_group
953
- 954 # Save the new channel to the local list of channels
- 955 if loading_stream_type == self . live_type :
- 956 if new_channel . group_id == "9999" :
- 957 self . printx ( f " - xEverythingElse Channel -> { new_channel . name } - { new_channel . stream_type } " )
- 958 self . channels . append ( new_channel )
- 959 elif loading_stream_type == self . vod_type :
- 960 if new_channel . group_id == "9999" :
- 961 self . printx ( f " - xEverythingElse Channel -> { new_channel . name } - { new_channel . stream_type } " )
- 962 self . movies . append ( new_channel )
- 963 if new_channel . age_days_from_added < 31 :
- 964 self . movies_30days . append ( new_channel )
- 965 if new_channel . age_days_from_added < 7 :
- 966 self . movies_7days . append ( new_channel )
- 967 else :
- 968 self . series . append ( new_series )
+ 954 if loading_stream_type == self . series_type :
+ 955 # Load all Series
+ 956 new_series = Serie ( self , stream_channel )
+ 957 # To get all the Episodes for every Season of each
+ 958 # Series is very time consuming, we will only
+ 959 # populate the Series once the user click on the
+ 960 # Series, the Seasons and Episodes will be loaded
+ 961 # using x.getSeriesInfoByID() function
+ 962
+ 963 else :
+ 964 new_channel = Channel (
+ 965 self ,
+ 966 group_title ,
+ 967 stream_channel
+ 968 )
969
- 970 # Add stream to the specific Group
- 971 if the_group is not None :
- 972 if loading_stream_type != self . series_type :
- 973 the_group . channels . append ( new_channel )
- 974 else :
- 975 the_group . series . append ( new_series )
- 976 else :
- 977 self . printx ( f " - Group not found ` { stream_channel [ 'name' ] } `" )
- 978 print ( " \n " )
- 979 # Print information of which streams have been skipped
- 980 if self . hide_adult_content :
- 981 self . printx ( f " - Skipped { skipped_adult_content } adult { loading_stream_type } streams" )
- 982 if skipped_no_name_content > 0 :
- 983 self . printx ( f " - Skipped { skipped_no_name_content } "
- 984 f "unprintable { loading_stream_type } streams" )
- 985 else :
- 986 self . printx ( f " - Could not load { loading_stream_type } Streams" )
- 987
- 988 self . state [ "loaded" ] = True
- 989 return True
- 990
- 991 def _save_to_file_skipped_streams ( self , stream_channel : Channel ):
- 992
- 993 # Build the full path
- 994 full_filename = osp . join ( self . cache_path , "skipped_streams.json" )
- 995
- 996 # If the path makes sense, save the file
- 997 json_data = json . dumps ( stream_channel , ensure_ascii = False )
- 998 try :
- 999 with open ( full_filename , mode = "a" , encoding = "utf-8" ) as myfile :
-1000 myfile . writelines ( json_data )
-1001 myfile . write ( ' \n ' )
-1002 return True
-1003 except Exception as e :
-1004 self . printx ( f " - Could not save to skipped stream file ` { full_filename } `: e=` { e } `" )
-1005 return False
+ 970 # Save the new channel to the local list of channels
+ 971 if loading_stream_type == self . live_type :
+ 972 if new_channel . group_id == CATCH_ALL_CATEGORY_ID :
+ 973 self . printx ( f " - xEverythingElse Channel -> { new_channel . name } - { new_channel . stream_type } " )
+ 974 self . channels . append ( new_channel )
+ 975 elif loading_stream_type == self . vod_type :
+ 976 if new_channel . group_id == CATCH_ALL_CATEGORY_ID :
+ 977 try :
+ 978 self . printx ( f " - xEverythingElse Channel -> { new_channel . name } - { new_channel . stream_type } " )
+ 979 except AttributeError as e :
+ 980 print ( f " { new_channel . raw } { e } " )
+ 981 self . movies . append ( new_channel )
+ 982 if new_channel . age_days_from_added < MOVIES_RECENT_30_DAYS_THRESHOLD :
+ 983 self . movies_30days . append ( new_channel )
+ 984 if new_channel . age_days_from_added < MOVIES_RECENT_7_DAYS_THRESHOLD :
+ 985 self . movies_7days . append ( new_channel )
+ 986 else :
+ 987 self . series . append ( new_series )
+ 988
+ 989 # Add stream to the specific Group
+ 990 if the_group is not None :
+ 991 if loading_stream_type != self . series_type :
+ 992 the_group . channels . append ( new_channel )
+ 993 else :
+ 994 the_group . series . append ( new_series )
+ 995 else :
+ 996 self . printx ( f " - Group not found ` { stream_channel [ 'name' ] } `" )
+ 997 print ( " \n " )
+ 998 # Print information of which streams have been skipped
+ 999 if self . hide_adult_content :
+1000 self . printx ( f " - Skipped { skipped_adult_content } adult { loading_stream_type } streams" )
+1001 if skipped_no_name_content > 0 :
+1002 self . printx ( f " - Skipped { skipped_no_name_content } "
+1003 f "unprintable { loading_stream_type } streams" )
+1004 else :
+1005 self . printx ( f " - Could not load { loading_stream_type } Streams" )
1006
-1007 def get_series_info_by_id ( self , get_series : dict ):
-1008 """Get Seasons and Episodes for a Series
+1007 self . state [ "loaded" ] = True
+1008 return True
1009
-1010 Args:
-1011 get_series (dict): Series dictionary
-1012 """
-1013
-1014 series_seasons = self . _load_series_info_by_id_from_provider ( get_series . series_id )
+1010 def _save_to_file_skipped_streams ( self , stream_channel : Channel ):
+1011 """Log skipped streams to a local JSON file for debugging.
+1012
+1013 Args:
+1014 stream_channel (Channel): The channel object being skipped.
1015
-1016 if series_seasons [ "seasons" ] is None :
-1017 series_seasons [ "seasons" ] = [
-1018 { "name" : "Season 1" , "cover" : series_seasons [ "info" ][ "cover" ]}
-1019 ]
-1020
-1021 for series_info in series_seasons [ "seasons" ]:
-1022 season_name = series_info [ "name" ]
-1023 season = Season ( season_name )
-1024 get_series . seasons [ season_name ] = season
-1025 if "episodes" in series_seasons . keys ():
-1026 for series_season in series_seasons [ "episodes" ] . keys ():
-1027 # add only episodes of current season
-1028 # use series_season as fallback to make sure episodes will be set
-1029 # if we can not parse the season number
-1030 if int ( series_info . get ( 'season_number' , series_season )) != int ( series_season ):
-1031 continue
-1032 for episode_info in series_seasons [ "episodes" ][ str ( series_season )]:
-1033 new_episode_channel = Episode (
-1034 self , series_info , "Testing" , episode_info
-1035 )
-1036 season . episodes [ episode_info [ "title" ]] = new_episode_channel
-1037
-1038 def _handle_request_exception ( self , exception : requests . exceptions . RequestException ):
-1039 """Handle different types of request exceptions."""
-1040 if isinstance ( exception , requests . exceptions . ConnectionError ):
-1041 self . printx ( " - Connection Error: Possible network problem \
-1042 (e.g. DNS failure, refused connection, etc)" )
-1043 elif isinstance ( exception , requests . exceptions . HTTPError ):
-1044 self . printx ( " - HTTP Error" )
-1045 elif isinstance ( exception , requests . exceptions . TooManyRedirects ):
-1046 self . printx ( " - TooManyRedirects" )
-1047 elif isinstance ( exception , requests . exceptions . ReadTimeout ):
-1048 self . printx ( " - Timeout while loading data" )
-1049 else :
-1050 self . printx ( f " - An unexpected error occurred: { exception } " )
-1051
-1052 def _get_request ( self , url : str , timeout : Tuple [ int , int ] = ( 2 , 15 )) -> Optional [ dict ]:
-1053 """Generic GET Request with Error handling
-1054
-1055 Args:
-1056 URL (str): The URL where to GET content
-1057 timeout (Tuple[int, int], optional): Connection and Downloading Timeout.
-1058 Defaults to (2,15).
-1059
-1060 Returns:
-1061 Optional[dict]: JSON dictionary of the loaded data, or None
-1062 """
+1016 Returns:
+1017 bool: True if logging succeeded.
+1018 """
+1019 # Build the full path
+1020 full_filename = osp . join ( self . cache_path , "skipped_streams.json" )
+1021
+1022 # If the path makes sense, save the file
+1023 json_data = json . dumps ( stream_channel , ensure_ascii = False )
+1024 try :
+1025 with open ( full_filename , mode = "a" , encoding = "utf-8" ) as myfile :
+1026 myfile . writelines ( json_data )
+1027 myfile . write ( ' \n ' )
+1028 return True
+1029 except Exception as e :
+1030 self . printx ( f " - Could not save to skipped stream file ` { full_filename } `: e=` { e } `" )
+1031 return False
+1032
+1033 def get_series_info_by_id ( self , get_series : dict ):
+1034 """Fetch and populate seasons and episodes for a specific series object.
+1035
+1036 Args:
+1037 get_series (Serie): The series object to be populated with detailed data.
+1038 """
+1039
+1040 series_seasons = self . _load_series_info_by_id_from_provider ( get_series . series_id )
+1041
+1042 if series_seasons [ "seasons" ] is None :
+1043 series_seasons [ "seasons" ] = [
+1044 { "name" : "Season 1" , "cover" : series_seasons [ "info" ][ "cover" ]}
+1045 ]
+1046
+1047 for series_info in series_seasons [ "seasons" ]:
+1048 season_name = series_info [ "name" ]
+1049 season = Season ( season_name )
+1050 get_series . seasons [ season_name ] = season
+1051 if "episodes" in series_seasons . keys ():
+1052 for series_season in series_seasons [ "episodes" ] . keys ():
+1053 # add only episodes of current season
+1054 # use series_season as fallback to make sure episodes will be set
+1055 # if we can not parse the season number
+1056 if int ( series_info . get ( 'season_number' , series_season )) != int ( series_season ):
+1057 continue
+1058 for episode_info in series_seasons [ "episodes" ][ str ( series_season )]:
+1059 new_episode_channel = Episode (
+1060 self , series_info , "Testing" , episode_info
+1061 )
+1062 season . episodes [ episode_info [ "title" ]] = new_episode_channel
1063
-1064 kb_size = 1024
-1065 all_data = []
-1066 down_stats = { "bytes" : 0 , "kbytes" : 0 , "mbytes" : 0 , "start" : 0.0 , "delta_sec" : 0.0 }
-1067
-1068 response = None
-1069 for attempt in range ( 10 ):
-1070 try :
-1071 response = requests . get (
-1072 url ,
-1073 stream = True ,
-1074 timeout = timeout ,
-1075 headers = self . connection_headers
-1076 )
-1077 response . raise_for_status () # Raise an HTTPError for bad responses (4xx and 5xx)
-1078 break
-1079 except requests . exceptions . RequestException as e :
-1080 self . _handle_request_exception ( e )
-1081 return None
-1082
-1083 # If there is an answer from the remote server
-1084 if response is not None and response . status_code in ( 200 , 206 ):
-1085 down_stats [ "start" ] = time . perf_counter ()
-1086
-1087 # Set downloaded size
-1088 down_stats [ "bytes" ] = 0
-1089
-1090 # Set stream blocks
-1091 block_bytes = int ( 1 * kb_size * kb_size ) # 1 MB
-1092
-1093 # Grab data by block_bytes
-1094 for data in response . iter_content ( block_bytes , decode_unicode = False ):
-1095 down_stats [ "bytes" ] += len ( data )
-1096 down_stats [ "kbytes" ] = down_stats [ "bytes" ] / kb_size
-1097 down_stats [ "mbytes" ] = down_stats [ "bytes" ] / kb_size / kb_size
-1098 down_stats [ "delta_sec" ] = time . perf_counter () - down_stats [ "start" ]
-1099 if down_stats [ "delta_sec" ] > 0 :
-1100 download_speed_average = down_stats [ "kbytes" ] // down_stats [ "delta_sec" ]
-1101 else :
-1102 download_speed_average = 0
-1103 # Show progress
-1104 msg = f 'Downloading { down_stats [ "kbytes" ] : .1f } kB at { download_speed_average : .0f } kB/s'
-1105 sys . stdout . write ( " \r " + msg )
-1106 sys . stdout . flush ()
-1107 all_data . append ( data )
-1108 sys . stdout . write ( " - Done \n " )
-1109 sys . stdout . flush ()
-1110 full_content = b '' . join ( all_data )
-1111 return json . loads ( full_content )
-1112
-1113 self . printx ( f "HTTP error { response . status_code } while retrieving from { url } " )
-1114
-1115 return None
+1064 def _handle_request_exception ( self , exception : requests . exceptions . RequestException ):
+1065 """Handle different types of request exceptions."""
+1066 if isinstance ( exception , requests . exceptions . ConnectionError ):
+1067 self . printx ( " - Connection Error: Possible network problem \
+1068 (e.g. DNS failure, refused connection, etc)" )
+1069 elif isinstance ( exception , requests . exceptions . HTTPError ):
+1070 self . printx ( " - HTTP Error" )
+1071 elif isinstance ( exception , requests . exceptions . TooManyRedirects ):
+1072 self . printx ( " - TooManyRedirects" )
+1073 elif isinstance ( exception , requests . exceptions . ReadTimeout ):
+1074 self . printx ( " - Timeout while loading data" )
+1075 else :
+1076 self . printx ( f " - An unexpected error occurred: { exception } " )
+1077
+1078 def _get_request ( self , url : str , timeout : Tuple [ int , int ] = REQUEST_DEFAULT_TIMEOUT ) -> Optional [ dict ]:
+1079 """Perform a GET request with retries and progress reporting.
+1080
+1081 Args:
+1082 url (str): The target URL.
+1083 timeout (Tuple[int, int], optional): Connection and read timeout.
+1084
+1085 Returns:
+1086 Optional[dict]: The parsed JSON response, or None on error.
+1087 """
+1088
+1089 all_data = []
+1090 down_stats = { "bytes" : 0 , "kbytes" : 0 , "mbytes" : 0 , "start" : 0.0 , "delta_sec" : 0.0 }
+1091
+1092 response = None
+1093 for attempt in range ( REQUEST_MAX_ATTEMPTS ):
+1094 try :
+1095 response = requests . get (
+1096 url ,
+1097 stream = True ,
+1098 timeout = timeout ,
+1099 headers = self . connection_headers
+1100 )
+1101 response . raise_for_status () # Raise an HTTPError for bad responses (4xx and 5xx)
+1102 break
+1103 except requests . exceptions . RequestException as e :
+1104 self . _handle_request_exception ( e )
+1105 return None
+1106
+1107 # If there is an answer from the remote server
+1108 if response is not None and response . status_code in ( 200 , 206 ):
+1109 down_stats [ "start" ] = time . perf_counter ()
+1110
+1111 # Set downloaded size
+1112 down_stats [ "bytes" ] = 0
+1113
+1114 # Set stream blocks
+1115 block_bytes = int ( REQUEST_BLOCK_SIZE )
1116
-1117 # GET Stream Categories
-1118 def _load_categories_from_provider ( self , stream_type : str ):
-1119 """Get from provider all category for specific stream type from provider
-1120
-1121 Args:
-1122 stream_type (str): Stream type can be Live, VOD, Series
-1123
-1124 Returns:
-1125 [type]: JSON if successful, otherwise None
-1126 """
-1127 url = ""
-1128 if stream_type == self . live_type :
-1129 url = api . get_live_categories_URL ( self . base_url )
-1130 elif stream_type == self . vod_type :
-1131 url = api . get_vod_cat_URL ( self . base_url )
-1132 elif stream_type == self . series_type :
-1133 url = api . get_series_cat_URL ( self . base_url )
-1134 else :
-1135 url = ""
+1117 # Grab data by block_bytes
+1118 for data in response . iter_content ( block_bytes , decode_unicode = False ):
+1119 down_stats [ "bytes" ] += len ( data )
+1120 down_stats [ "kbytes" ] = down_stats [ "bytes" ] / KB_FACTOR
+1121 down_stats [ "mbytes" ] = down_stats [ "bytes" ] / MB_FACTOR
+1122 down_stats [ "delta_sec" ] = time . perf_counter () - down_stats [ "start" ]
+1123 if down_stats [ "delta_sec" ] > 0 :
+1124 download_speed_average = down_stats [ "kbytes" ] // down_stats [ "delta_sec" ]
+1125 else :
+1126 download_speed_average = 0
+1127 # Show progress
+1128 msg = f 'Downloading { down_stats [ "kbytes" ] : .1f } kB at { download_speed_average : .0f } kB/s'
+1129 sys . stdout . write ( " \r " + msg )
+1130 sys . stdout . flush ()
+1131 all_data . append ( data )
+1132 sys . stdout . write ( " - Done \n " )
+1133 sys . stdout . flush ()
+1134 full_content = b '' . join ( all_data )
+1135 return json . loads ( full_content )
1136
-1137 return self . _get_request ( url )
+1137 self . printx ( f "HTTP error { response . status_code } while retrieving from { url } " )
1138
-1139 # GET Streams
-1140 def _load_streams_from_provider ( self , stream_type : str ):
-1141 """Get from provider all streams for specific stream type
-1142
-1143 Args:
-1144 stream_type (str): Stream type can be Live, VOD, Series
-1145
-1146 Returns:
-1147 [type]: JSON if successful, otherwise None
-1148 """
-1149 url = ""
-1150 if stream_type == self . live_type :
-1151 url = api . get_live_streams_URL ( self . base_url )
-1152 elif stream_type == self . vod_type :
-1153 url = api . get_vod_streams_URL ( self . base_url )
-1154 elif stream_type == self . series_type :
-1155 url = api . get_series_URL ( self . base_url )
-1156 else :
-1157 url = ""
-1158
-1159 return self . _get_request ( url )
-1160
-1161 # GET Streams by Category
-1162 def _load_streams_by_category_from_provider ( self , stream_type : str , category_id ):
-1163 """Get from provider all streams for specific stream type with category/group ID
-1164
-1165 Args:
-1166 stream_type (str): Stream type can be Live, VOD, Series
-1167 category_id ([type]): Category/Group ID.
-1168
-1169 Returns:
-1170 [type]: JSON if successful, otherwise None
-1171 """
-1172 url = ""
-1173
-1174 if stream_type == self . live_type :
-1175 url = api . get_live_streams_URL_by_category ( category_id , self . base_url )
-1176 elif stream_type == self . vod_type :
-1177 url = api . get_vod_streams_URL_by_category ( category_id , self . base_url )
-1178 elif stream_type == self . series_type :
-1179 url = api . get_series_URL_by_category ( category_id , self . base_url )
-1180 else :
-1181 url = ""
+1139 return None
+1140
+1141 # GET Stream Categories
+1142 def _load_categories_from_provider ( self , stream_type : str ):
+1143 """Fetch all categories for a specific stream type from the provider.
+1144
+1145 Args:
+1146 stream_type (str): Either 'Live', 'VOD', or 'Series'.
+1147 """
+1148 url = ""
+1149 if stream_type == self . live_type :
+1150 url = api . get_live_categories_URL ( self . base_url )
+1151 elif stream_type == self . vod_type :
+1152 url = api . get_vod_cat_URL ( self . base_url )
+1153 elif stream_type == self . series_type :
+1154 url = api . get_series_cat_URL ( self . base_url )
+1155 else :
+1156 url = ""
+1157
+1158 return self . _get_request ( url )
+1159
+1160 # GET Streams
+1161 def _load_streams_from_provider ( self , stream_type : str ):
+1162 """Fetch all streams for a specific stream type from the provider.
+1163
+1164 Args:
+1165 stream_type (str): Either 'Live', 'VOD', or 'Series'.
+1166 """
+1167 url = ""
+1168 if stream_type == self . live_type :
+1169 url = api . get_live_streams_URL ( self . base_url )
+1170 elif stream_type == self . vod_type :
+1171 url = api . get_vod_streams_URL ( self . base_url )
+1172 elif stream_type == self . series_type :
+1173 url = api . get_series_URL ( self . base_url )
+1174 else :
+1175 url = ""
+1176
+1177 return self . _get_request ( url )
+1178
+1179 # GET Streams by Category
+1180 def _load_streams_by_category_from_provider ( self , stream_type : str , category_id ):
+1181 """Fetch streams within a specific category from the provider.
1182
-1183 return self . _get_request ( url )
-1184
-1185 # GET SERIES Info
-1186 def _load_series_info_by_id_from_provider ( self , series_id : str , return_type : str = "DICT" ):
-1187 """Gets information about a Serie
+1183 Args:
+1184 stream_type (str): Either 'Live', 'VOD', or 'Series'.
+1185 category_id (int|str): The unique ID of the category.
+1186 """
+1187 url = ""
1188
-1189 Args:
-1190 series_id (str): Serie ID as described in Group
-1191 return_type (str, optional): Output format, 'DICT' or 'JSON'. Defaults to "DICT".
-1192
-1193 Returns:
-1194 [type]: JSON if successful, otherwise None
-1195 """
-1196 data = self . _get_request ( api . get_series_info_URL_by_ID ( series_id , self . base_url ))
-1197 if return_type == "JSON" :
-1198 return json . dumps ( data , ensure_ascii = False )
-1199 return data
-1200
-1201 # The seasons array, might be filled or might be completely empty.
-1202 # If it is not empty, it will contain the cover, overview and the air date
-1203 # of the selected season.
-1204 # In your APP if you want to display the series, you have to take that
-1205 # from the episodes array.
-1206
-1207 # GET VOD Info
-1208 def vodInfoByID ( self , vod_id ):
-1209 return self . _get_request ( api . get_VOD_info_URL_by_ID ( vod_id , self . base_url ), self . base_url )
-1210
-1211 # GET short_epg for LIVE Streams (same as stalker portal,
-1212 # prints the next X EPG that will play soon)
-1213 def liveEpgByStream ( self , stream_id ):
-1214 return self . _get_request ( api . get_live_epg_URL_by_stream ( stream_id , self . base_url ))
-1215
-1216 def liveEpgByStreamAndLimit ( self , stream_id , limit ):
-1217 return self . _get_request ( api . get_live_epg_URL_by_stream_and_limit ( stream_id , limit , self . base_url ))
+1189 if stream_type == self . live_type :
+1190 url = api . get_live_streams_URL_by_category ( category_id , self . base_url )
+1191 elif stream_type == self . vod_type :
+1192 url = api . get_vod_streams_URL_by_category ( category_id , self . base_url )
+1193 elif stream_type == self . series_type :
+1194 url = api . get_series_URL_by_category ( category_id , self . base_url )
+1195 else :
+1196 url = ""
+1197
+1198 return self . _get_request ( url )
+1199
+1200 # GET SERIES Info
+1201 def _load_series_info_by_id_from_provider ( self , series_id : str , return_type : str = "DICT" ):
+1202 """Fetch detailed information about a series from the provider.
+1203
+1204 Args:
+1205 series_id (str): The unique series ID.
+1206 return_type (str, optional): The format, 'DICT' or 'JSON'. Defaults to "DICT".
+1207 """
+1208 data = self . _get_request ( api . get_series_info_URL_by_ID ( series_id , self . base_url ))
+1209 if return_type == "JSON" :
+1210 return json . dumps ( data , ensure_ascii = False )
+1211 return data
+1212
+1213 # The seasons array, might be filled or might be completely empty.
+1214 # If it is not empty, it will contain the cover, overview and the air date
+1215 # of the selected season.
+1216 # In your APP if you want to display the series, you have to take that
+1217 # from the episodes array.
1218
-1219 # GET ALL EPG for LIVE Streams (same as stalker portal,
-1220 # but it will print all epg listings regardless of the day)
-1221 def allLiveEpgByStream ( self , stream_id ):
-1222 return self . _get_request ( api . get_all_live_epg_URL_by_stream ( stream_id , self . base_url ))
-1223
-1224 # Full EPG List for all Streams
-1225 def allEpg ( self ):
-1226 return self . _get_request ( api . get_all_epg_URL ( self . base_url , self . username , self . password ))
+1219 # GET VOD Info
+1220 def vodInfoByID ( self , vod_id ):
+1221 """Fetch VOD information by movie ID.
+1222
+1223 Args:
+1224 vod_id (int|str): The movie ID.
+1225 """
+1226 return self . _get_request ( api . get_VOD_info_URL_by_ID ( vod_id , self . base_url ), self . base_url )
+1227
+1228 # GET short_epg for LIVE Streams (same as stalker portal,
+1229 # prints the next X EPG that will play soon)
+1230 def liveEpgByStream ( self , stream_id ):
+1231 """Fetch current short EPG data for a live stream.
+1232
+1233 Args:
+1234 stream_id (int|str): The stream ID.
+1235 """
+1236 return self . _get_request ( api . get_live_epg_URL_by_stream ( stream_id , self . base_url ))
+1237
+1238 def liveEpgByStreamAndLimit ( self , stream_id , limit ):
+1239 """Fetch short EPG data for a live stream with a result limit.
+1240
+1241 Args:
+1242 stream_id (int|str): The stream ID.
+1243 limit (int): Maximum number of entries.
+1244 """
+1245 return self . _get_request ( api . get_live_epg_URL_by_stream_and_limit ( stream_id , limit , self . base_url ))
+1246
+1247 # GET ALL EPG for LIVE Streams (same as stalker portal,
+1248 # but it will print all epg listings regardless of the day)
+1249 def allLiveEpgByStream ( self , stream_id ):
+1250 """Fetch all available EPG data for a live stream via simple_data_table.
+1251
+1252 Args:
+1253 stream_id (int|str): The stream ID.
+1254 """
+1255 return self . _get_request ( api . get_all_live_epg_URL_by_stream ( stream_id , self . base_url ))
+1256
+1257 # Full EPG List for all Streams
+1258 def allEpg ( self ):
+1259 """Fetch the complete XMLTV EPG for all channels."""
+1260 return self . _get_request ( api . get_all_epg_URL ( self . base_url , self . username , self . password ))
-
+ Core client for interacting with Xtream Codes IPTV providers.
+
+
- XTream ( provider_name : str , provider_username : str , provider_password : str , provider_url : str , headers : dict = None , hide_adult_content : bool = False , cache_path : str = '' , reload_time_sec : int = 28800 , validate_json : bool = False , enable_flask : bool = False , debug_flask : bool = True , flask_port : int = 5000 )
+ XTream ( provider_name : str , provider_username : str , provider_password : str , provider_url : str , headers : dict = {} , hide_adult_content : bool = False , cache_path : str = '' , reload_time_sec : int = 28800 , validate_json : bool = False , enable_flask : bool = False , debug_flask : bool = True , flask_port : int = 5000 )
View Source
-
335 def __init__ (
-336 self ,
-337 provider_name : str ,
-338 provider_username : str ,
-339 provider_password : str ,
-340 provider_url : str ,
-341 headers : dict = None ,
-342 hide_adult_content : bool = False ,
-343 cache_path : str = "" ,
-344 reload_time_sec : int = 60 * 60 * 8 ,
-345 validate_json : bool = False ,
-346 enable_flask : bool = False ,
-347 debug_flask : bool = True ,
-348 flask_port : int = 5000
-349 ):
-350 """Initialize Xtream Class
-351
-352 Args:
-353 provider_name (str): Name of the IPTV provider
-354 provider_username (str): User name of the IPTV provider
-355 provider_password (str): Password of the IPTV provider
-356 provider_url (str): URL of the IPTV provider
-357 headers (dict): Requests Headers
-358 hide_adult_content(bool, optional): When `True` hide stream that are marked for adult
-359 cache_path (str, optional): Location where to save loaded files.
-360 Defaults to empty string.
-361 reload_time_sec (int, optional): Number of seconds before automatic reloading
-362 (-1 to turn it OFF)
-363 validate_json (bool, optional): Check Xtream API provided JSON for validity
-364 enable_flask (bool, optional): Enable Flask
-365 debug_flask (bool, optional): Enable the debug mode in Flask
-366 flask_port (int, optional): Flask Port Number
-367
-368 Returns: XTream Class Instance
-369
-370 - Note 1: If it fails to authorize with provided username and password,
-371 auth_data will be an empty dictionary.
-372 - Note 2: The JSON validation option will take considerable amount of time and it should be
-373 used only as a debug tool. The Xtream API JSON from the provider passes through a
-374 schema that represent the best available understanding of how the Xtream API
-375 works.
-376 """
-377 self . server = provider_url
-378 self . username = provider_username
-379 self . password = provider_password
-380 self . name = provider_name
-381 self . cache_path = cache_path
-382 self . hide_adult_content = hide_adult_content
-383 self . threshold_time_sec = reload_time_sec
-384 self . validate_json = validate_json
-385
-386 self . auth_data = {}
-387 self . authorization = { 'username' : '' , 'password' : '' }
-388
-389 self . groups = []
-390 self . channels = []
-391 self . series = []
-392 self . movies = []
-393 self . movies_30days = []
-394 self . movies_7days = []
-395
-396 self . connection_headers = {}
-397
-398 self . state = { 'authenticated' : False , 'loaded' : False }
-399
-400 # Used by REST API to get download progress
-401 self . download_progress : dict = { 'StreamId' : 0 , 'Total' : 0 , 'Progress' : 0 }
-402
-403 # get the pyxtream local path
-404 self . app_fullpath = osp . dirname ( osp . realpath ( __file__ ))
-405
-406 # prepare location of local html template
-407 self . html_template_folder = osp . join ( self . app_fullpath , "html" )
-408
-409 # if the cache_path is specified, test that it is a directory
-410 if self . cache_path != "" :
-411 # If the cache_path is not a directory, clear it
-412 if not osp . isdir ( self . cache_path ):
-413 self . printx ( " - Cache Path is not a directory, using default '~/.xtream-cache/'" )
-414 self . cache_path = ""
-415
-416 # If the cache_path is still empty, use default
-417 if self . cache_path == "" :
-418 self . cache_path = osp . expanduser ( "~/.xtream-cache/" )
-419 if not osp . isdir ( self . cache_path ):
-420 makedirs ( self . cache_path , exist_ok = True )
-421 self . printx ( f "pyxtream cache path located at { self . cache_path } " )
-422
-423 if headers is not None :
-424 self . connection_headers = headers
-425 else :
-426 self . connection_headers = { 'User-Agent' : "Mozilla/5.0" }
-427
-428 self . authenticate ()
-429
-430 if self . state [ 'authenticated' ]:
-431 # Show message about Reload Timer configuration
-432 if self . threshold_time_sec > 0 :
-433 self . printx ( f "Reload timer is ON and set to { self . threshold_time_sec } seconds" )
-434 else :
-435 self . printx ( "Reload timer is OFF" )
-436 # Start Flask Web Interface if enabled
-437 if USE_FLASK and enable_flask :
-438 self . printx ( "Starting Web Interface" )
-439 self . flaskapp = FlaskWrap (
-440 self . name , self , self . html_template_folder ,
-441 debug = debug_flask , port = flask_port
-442 )
-443 self . flaskapp . start ()
-444 else :
-445 self . printx ( "Web interface not running" )
+ 256 def __init__ (
+257 self ,
+258 provider_name : str ,
+259 provider_username : str ,
+260 provider_password : str ,
+261 provider_url : str ,
+262 headers : dict = {},
+263 hide_adult_content : bool = False ,
+264 cache_path : str = "" ,
+265 reload_time_sec : int = DEFAULT_RELOAD_TIME_SEC ,
+266 validate_json : bool = False ,
+267 enable_flask : bool = False ,
+268 debug_flask : bool = True ,
+269 flask_port : int = DEFAULT_FLASK_PORT
+270 ):
+271 """Initialize the XTream client.
+272
+273 Sets up the connection parameters, authentication state, and local cache
+274 configuration for interacting with an Xtream Codes IPTV provider.
+275
+276 Args:
+277 provider_name (str): Human-readable name of the IPTV provider.
+278 provider_username (str): Username for authentication.
+279 provider_password (str): Password for authentication.
+280 provider_url (str): Base URL of the IPTV provider.
+281 headers (dict, optional): Custom HTTP headers for requests. Defaults to {}.
+282 hide_adult_content (bool, optional): If True, filters out adult content. Defaults to False.
+283 cache_path (str, optional): Directory for local data persistence. Defaults to "".
+284 reload_time_sec (int, optional): Cache TTL in seconds. Defaults to DEFAULT_RELOAD_TIME_SEC.
+285 validate_json (bool, optional): If True, validates responses against schemas. Defaults to False.
+286 enable_flask (bool, optional): If True, starts the REST API server. Defaults to False.
+287 debug_flask (bool, optional): If True, enables Flask debug mode. Defaults to True.
+288 flask_port (int, optional): Port for the Flask server. Defaults to DEFAULT_FLASK_PORT.
+289 """
+290 self . server = provider_url
+291 self . username = provider_username
+292 self . password = provider_password
+293 self . name = provider_name
+294 self . cache_path = cache_path
+295 self . hide_adult_content = hide_adult_content
+296 self . threshold_time_sec = reload_time_sec
+297 self . validate_json = validate_json
+298 self . live_type = "Live"
+299 self . vod_type = "VOD"
+300 self . series_type = "Series"
+301
+302 self . live_catch_all_group = Group (
+303 { "category_id" : "9999" , "category_name" : "xEverythingElse" , "parent_id" : 0 }, self . live_type
+304 )
+305 self . vod_catch_all_group = Group (
+306 { "category_id" : "9999" , "category_name" : "xEverythingElse" , "parent_id" : 0 }, self . vod_type
+307 )
+308 self . series_catch_all_group = Group (
+309 { "category_id" : "9999" , "category_name" : "xEverythingElse" , "parent_id" : 0 }, self . series_type
+310 )
+311
+312 self . auth_data = {}
+313 self . authorization = { 'username' : '' , 'password' : '' }
+314
+315 self . groups = []
+316 self . channels = []
+317 self . series = []
+318 self . movies = []
+319 self . movies_30days = []
+320 self . movies_7days = []
+321
+322 self . connection_headers = {}
+323
+324 self . state = { 'authenticated' : False , 'loaded' : False , 'offline' : False }
+325
+326 # Used by REST API to get download progress
+327 self . download_progress : dict = { 'StreamId' : 0 , 'Total' : 0 , 'Progress' : 0 }
+328
+329 # get the pyxtream local path
+330 self . app_fullpath = osp . dirname ( osp . realpath ( __file__ ))
+331
+332 # prepare location of local html template
+333 self . html_template_folder = osp . join ( self . app_fullpath , "html" )
+334
+335 # if the cache_path is specified, test that it is a directory
+336 if self . cache_path != "" :
+337 # If the cache_path is not a directory, clear it
+338 if not osp . isdir ( self . cache_path ):
+339 self . printx ( " - Cache Path is not a directory, using default '~/.xtream-cache/'" )
+340 self . cache_path = ""
+341
+342 # If the cache_path is still empty, use default
+343 if self . cache_path == "" :
+344 self . cache_path = osp . expanduser ( "~/.xtream-cache/" )
+345 if not osp . isdir ( self . cache_path ):
+346 makedirs ( self . cache_path , exist_ok = True )
+347 self . printx ( f "pyxtream cache path located at { self . cache_path } " )
+348
+349 if headers is not None :
+350 self . connection_headers = headers
+351 else :
+352 self . connection_headers = { 'User-Agent' : "Mozilla/5.0" }
+353
+354 self . authenticate ()
+355
+356 if self . state [ 'authenticated' ]:
+357 # Show message about Reload Timer configuration
+358 if self . threshold_time_sec > 0 :
+359 self . printx ( f "Reload timer is ON and set to { self . threshold_time_sec } seconds" )
+360 else :
+361 self . printx ( "Reload timer is OFF" )
+362 # Start Flask Web Interface if enabled
+363 if USE_FLASK and enable_flask :
+364 self . printx ( "Starting Web Interface" )
+365 self . flaskapp = FlaskWrap (
+366 self . name , self , self . html_template_folder ,
+367 debug = debug_flask , port = flask_port
+368 )
+369 self . flaskapp . start ()
+370 else :
+371 self . printx ( "Web interface not running" )
- Initialize Xtream Class
+
Initialize the XTream client.
+
+
Sets up the connection parameters, authentication state, and local cache
+configuration for interacting with an Xtream Codes IPTV provider.
Args:
- provider_name (str): Name of the IPTV provider
- provider_username (str): User name of the IPTV provider
- provider_password (str): Password of the IPTV provider
- provider_url (str): URL of the IPTV provider
- headers (dict): Requests Headers
- hide_adult_content(bool, optional): When True hide stream that are marked for adult
- cache_path (str, optional): Location where to save loaded files.
- Defaults to empty string.
- reload_time_sec (int, optional): Number of seconds before automatic reloading
- (-1 to turn it OFF)
- validate_json (bool, optional): Check Xtream API provided JSON for validity
- enable_flask (bool, optional): Enable Flask
- debug_flask (bool, optional): Enable the debug mode in Flask
- flask_port (int, optional): Flask Port Number
-
-
Returns: XTream Class Instance
-
-
-Note 1: If it fails to authorize with provided username and password,
-auth_data will be an empty dictionary.
-Note 2: The JSON validation option will take considerable amount of time and it should be
-used only as a debug tool. The Xtream API JSON from the provider passes through a
-schema that represent the best available understanding of how the Xtream API
-works.
-
+ provider_name (str): Human-readable name of the IPTV provider.
+ provider_username (str): Username for authentication.
+ provider_password (str): Password for authentication.
+ provider_url (str): Base URL of the IPTV provider.
+ headers (dict, optional): Custom HTTP headers for requests. Defaults to {}.
+ hide_adult_content (bool, optional): If True, filters out adult content. Defaults to False.
+ cache_path (str, optional): Directory for local data persistence. Defaults to "".
+ reload_time_sec (int, optional): Cache TTL in seconds. Defaults to DEFAULT_RELOAD_TIME_SEC.
+ validate_json (bool, optional): If True, validates responses against schemas. Defaults to False.
+ enable_flask (bool, optional): If True, starts the REST API server. Defaults to False.
+ debug_flask (bool, optional): If True, enables Flask debug mode. Defaults to True.
+ flask_port (int, optional): Port for the Flask server. Defaults to DEFAULT_FLASK_PORT.
-
-
-
- name =
-''
-
-
-
-
-
-
-
- server =
-''
+ server
@@ -4007,93 +3702,86 @@
-
+
- secure_server =
-''
+ username
-
+
-
+
- username =
-''
+ password
-
+
-
+
- password =
-''
+ name
-
+
-
+
- base_url =
-''
+ cache_path
-
+
-
+
- base_url_ssl =
-''
+ hide_adult_content
-
+
-
+
- cache_path =
-''
+ threshold_time_sec
-
+
-
+
- account_expiration : datetime.timedelta
+ validate_json
-
+
- live_type =
-'Live'
+ live_type
@@ -4104,8 +3792,7 @@
- vod_type =
-'VOD'
+ vod_type
@@ -4116,8 +3803,7 @@
- series_type =
-'Series'
+ series_type
@@ -4125,23 +3811,10 @@
-
-
-
- hide_adult_content =
-False
-
-
-
-
-
-
-
-
live_catch_all_group =
-
<Group object>
+
live_catch_all_group
@@ -4152,8 +3825,7 @@
-
vod_catch_all_group =
-
<Group object>
+
vod_catch_all_group
@@ -4164,8 +3836,7 @@
-
series_catch_all_group =
-
<Group object>
+
series_catch_all_group
@@ -4173,30 +3844,6 @@
-
-
-
- threshold_time_sec =
--1
-
-
-
-
-
-
-
-
-
-
- validate_json : bool =
-True
-
-
-
-
-
-
-
@@ -4352,12 +3999,30 @@
-
447 def printx ( self , msg : str , end = " \n " , flush = True ):
-448 print ( f " { self . name } : { msg } " , end = end , flush = flush )
+ 373 def printx ( self , msg : str , end = " \n " , flush = True ):
+374 """Print a message prefixed with the provider name.
+375
+376 Useful for logging multiple instances of the XTream class simultaneously.
+377
+378 Args:
+379 msg (str): The message to be printed.
+380 end (str, optional): The string appended after the last value. Defaults to "\\n".
+381 flush (bool, optional): Whether to forcibly flush the stream. Defaults to True.
+382 """
+383 print ( f " { self . name } : { msg } " , end = end , flush = flush )
-
+ Print a message prefixed with the provider name.
+
+
Useful for logging multiple instances of the XTream class simultaneously.
+
+
Args:
+ msg (str): The message to be printed.
+ end (str, optional): The string appended after the last value. Defaults to "\n".
+ flush (bool, optional): Whether to forcibly flush the stream. Defaults to True.
+
+
@@ -4371,13 +4036,33 @@
-
450 def get_download_progress ( self , stream_id : int = None ):
-451 # TODO: Add check for stream specific ID
-452 return json . dumps ( self . download_progress )
+ 385 def get_download_progress ( self , stream_id : int = None ):
+386 """Return the current download progress as a JSON string.
+387
+388 Retrieves the state of the downloader, including total bytes and progress.
+389
+390 Args:
+391 stream_id (int, optional): The specific stream ID to check. Currently unused.
+392
+393 Returns:
+394 str: A JSON-formatted string containing 'StreamId', 'Total', and 'Progress'.
+395 """
+396 # TODO: Add check for stream specific ID
+397 return json . dumps ( self . download_progress )
-
+ Return the current download progress as a JSON string.
+
+
Retrieves the state of the downloader, including total bytes and progress.
+
+
Args:
+ stream_id (int, optional): The specific stream ID to check. Currently unused.
+
+
Returns:
+ str: A JSON-formatted string containing 'StreamId', 'Total', and 'Progress'.
+
+
@@ -4391,12 +4076,22 @@
-
454 def get_last_7days ( self ):
-455 return json . dumps ( self . movies_7days , default = lambda x : x . export_json ())
+ 399 def get_last_7days ( self ):
+400 """Return movies added in the last 7 days as a JSON string.
+401
+402 Returns:
+403 str: A JSON-formatted list of movies added recently.
+404 """
+405 return json . dumps ( self . movies_7days , default = lambda x : x . export_json ())
-
+ Return movies added in the last 7 days as a JSON string.
+
+
Returns:
+ str: A JSON-formatted list of movies added recently.
+
+
@@ -4410,12 +4105,51 @@
-
457 def get_last_30days ( self ):
-458 return json . dumps ( self . movies_30days , default = lambda x : x . export_json ())
+ 407 def get_last_30days ( self ):
+408 """Return movies added in the last 30 days as a JSON string.
+409
+410 Returns:
+411 str: A JSON-formatted list of movies added in the last month.
+412 """
+413 return json . dumps ( self . movies_30days , default = lambda x : x . export_json ())
-
+ Return movies added in the last 30 days as a JSON string.
+
+
Returns:
+ str: A JSON-formatted list of movies added in the last month.
+
+
+
+
+
+
+
+
+ def
+ get_state (self ):
+
+ View Source
+
+
+
+
415 def get_state ( self ):
+416 """Return the current authentication and loading state as a JSON string.
+417
+418 Returns:
+419 str: A JSON string containing 'authenticated', 'loaded', and 'offline' flags.
+420 """
+421 return json . dumps ( self . state )
+
+
+
+
Return the current authentication and loading state as a JSON string.
+
+
Returns:
+ str: A JSON string containing 'authenticated', 'loaded', and 'offline' flags.
+
+
@@ -4429,68 +4163,72 @@
-
460 def search_stream ( self , keyword : str ,
-461 ignore_case : bool = True ,
-462 return_type : str = "LIST" ,
-463 stream_type : list = ( "series" , "movies" , "channels" ),
-464 added_after : datetime = None ) -> list :
-465 """Search for streams
-466
-467 Args:
-468 keyword (str): Keyword to search for. Supports REGEX
-469 ignore_case (bool, optional): True to ignore case during search. Defaults to "True".
-470 return_type (str, optional): Output format, 'LIST' or 'JSON'. Defaults to "LIST".
-471 stream_type (list, optional): Search within specific stream type.
-472 added_after (datetime, optional): Search for items that have been added after a certain date.
-473
-474 Returns:
-475 list: List with all the results, it could be empty.
-476 """
-477
-478 search_result = []
-479 regex_flags = re . IGNORECASE if ignore_case else 0
-480 regex = re . compile ( keyword , regex_flags )
-481
-482 stream_collections = {
-483 "movies" : self . movies ,
-484 "channels" : self . channels ,
-485 "series" : self . series
-486 }
-487
-488 for stream_type_name in stream_type :
-489 if stream_type_name in stream_collections :
-490 collection = stream_collections [ stream_type_name ]
-491 self . printx ( f "Checking { len ( collection ) } { stream_type_name } " )
-492 for stream in collection :
-493 if stream . name and regex . match ( stream . name ) is not None :
-494 if added_after is None :
-495 # Add all matches
-496 search_result . append ( stream . export_json ())
-497 else :
-498 # Only add if it is more recent
-499 pass
-500 else :
-501 self . printx ( f "` { stream_type_name } ` not found in collection" )
-502
-503 if return_type == "JSON" :
-504 self . printx ( f "Found { len ( search_result ) } results ` { keyword } `" )
-505 return json . dumps ( search_result , ensure_ascii = False )
-506
-507 return search_result
+ 423 def search_stream ( self , keyword : str ,
+424 ignore_case : bool = True ,
+425 return_type : str = "LIST" ,
+426 stream_type : list = ( "series" , "movies" , "channels" ),
+427 added_after : datetime = None ) -> list :
+428 """Search for streams across the loaded collection.
+429
+430 Uses regular expressions to find matches in titles across specified stream types.
+431
+432 Args:
+433 keyword (str): The regex pattern or search term.
+434 ignore_case (bool, optional): Whether to ignore case in the regex. Defaults to True.
+435 return_type (str, optional): The output format, either 'LIST' or 'JSON'. Defaults to "LIST".
+436 stream_type (list, optional): Collections to search in. Defaults to ("series", "movies", "channels").
+437 added_after (datetime, optional): Filter results added after this date.
+438
+439 Returns:
+440 list: A list of matching items in the requested format (LIST or JSON string).
+441 """
+442
+443 search_result = []
+444 regex_flags = re . IGNORECASE if ignore_case else 0
+445 regex = re . compile ( keyword , regex_flags )
+446
+447 stream_collections = {
+448 "movies" : self . movies ,
+449 "channels" : self . channels ,
+450 "series" : self . series
+451 }
+452
+453 for stream_type_name in stream_type :
+454 if stream_type_name in stream_collections :
+455 collection = stream_collections [ stream_type_name ]
+456 self . printx ( f "Checking { len ( collection ) } { stream_type_name } " )
+457 for stream in collection :
+458 if stream . name and regex . match ( stream . name ) is not None :
+459 if added_after is None :
+460 # Add all matches
+461 search_result . append ( stream . export_json ())
+462 else :
+463 # Only add if it is more recent
+464 pass
+465 else :
+466 self . printx ( f "` { stream_type_name } ` not found in collection" )
+467
+468 if return_type == "JSON" :
+469 self . printx ( f "Found { len ( search_result ) } results ` { keyword } `" )
+470 return json . dumps ( search_result , ensure_ascii = False )
+471
+472 return search_result
- Search for streams
+
Search for streams across the loaded collection.
+
+
Uses regular expressions to find matches in titles across specified stream types.
Args:
- keyword (str): Keyword to search for. Supports REGEX
- ignore_case (bool, optional): True to ignore case during search. Defaults to "True".
- return_type (str, optional): Output format, 'LIST' or 'JSON'. Defaults to "LIST".
- stream_type (list, optional): Search within specific stream type.
- added_after (datetime, optional): Search for items that have been added after a certain date.
+ keyword (str): The regex pattern or search term.
+ ignore_case (bool, optional): Whether to ignore case in the regex. Defaults to True.
+ return_type (str, optional): The output format, either 'LIST' or 'JSON'. Defaults to "LIST".
+ stream_type (list, optional): Collections to search in. Defaults to ("series", "movies", "channels").
+ added_after (datetime, optional): Filter results added after this date.
Returns:
- list: List with all the results, it could be empty.
+ list: A list of matching items in the requested format (LIST or JSON string).
@@ -4500,56 +4238,67 @@
def
- download_video (self , stream_type : str , stream_id : int ) -> str :
+ download_video (self , stream_id : int ) -> str :
View Source
- 509 def download_video ( self , stream_type : str , stream_id : int ) -> str :
-510 """Download Video from Stream ID
+ 474 def download_video ( self , stream_id : int ) -> str :
+475 """Download a video stream by its ID and return the local file path.
+476
+477 Attempts to resolve the stream ID to a movie or series episode and downloads it.
+478
+479 Args:
+480 stream_id (int): The unique ID of the stream to download.
+481
+482 Returns:
+483 str: The absolute local path to the downloaded file, or an empty string on failure.
+484 """
+485 url = ""
+486 filename = ""
+487
+488 # Search for the stream_id within series
+489 for series_stream in self . series :
+490 if series_stream . series_id == stream_id :
+491 if series_stream . episodes and "1" in series_stream . episodes :
+492 episode_object : Episode = series_stream . episodes [ "1" ]
+493 url = f " { series_stream . url } / { episode_object . id } . { episode_object . container_extension } "
+494 # Construct a local filename for the episode
+495 fn = f " { self . _slugify ( series_stream . name ) } -E1. { episode_object . container_extension } "
+496 filename = osp . join ( self . cache_path , fn )
+497 break
+498
+499 # Search for the stream_id within movies (streams) if not found in series
+500 if not url :
+501 for stream in self . movies :
+502 if stream . id == stream_id :
+503 url = stream . url
+504 fn = f " { self . _slugify ( stream . name ) } . { stream . raw [ 'container_extension' ] } "
+505 filename = osp . join ( self . cache_path , fn )
+506 break
+507
+508 # If the url was correctly built and file does not exists, start downloading
+509 if url == "" :
+510 return ""
511
-512 Args:
-513 stream_id (int): String identifying the stream ID
-514
-515 Returns:
-516 str: Absolute Path Filename where the file was saved. Empty string if could not download
-517 """
-518 url = ""
-519 filename = ""
-520 if stream_type == "series" :
-521 for series_stream in self . series :
-522 if series_stream . series_id == stream_id :
-523 episode_object : Episode = series_stream . episodes [ "1" ]
-524 url = f " { series_stream . url } / { episode_object . id } ." \
-525 f " { episode_object . container_extension } "
-526
-527 if stream_type == "movie" :
-528 for stream in self . movies :
-529 if stream . id == stream_id :
-530 url = stream . url
-531 fn = f " { self . _slugify ( stream . name ) } . { stream . raw [ 'container_extension' ] } "
-532 filename = osp . join ( self . cache_path , fn )
-533
-534 # If the url was correctly built and file does not exists, start downloading
-535 if url == "" :
-536 return ""
-537
-538 for attempt in range ( 10 ):
-539 if self . _download_video_impl ( url , filename ):
-540 return filename
-541
-542 return ""
+512 for attempt in range ( 10 ):
+513 if self . _download_video_impl ( url , filename ):
+514 return filename
+515
+516 return ""
- Download Video from Stream ID
+
Download a video stream by its ID and return the local file path.
+
+
Attempts to resolve the stream ID to a movie or series episode and downloads it.
Args:
- stream_id (int): String identifying the stream ID
+ stream_id (int): The unique ID of the stream to download.
Returns:
- str: Absolute Path Filename where the file was saved. Empty string if could not download
+ str: The absolute local path to the downloaded file, or an empty string on failure.
@@ -4565,61 +4314,77 @@
- 667 def authenticate ( self ):
-668 """Login to provider"""
-669 # If we have not yet successfully authenticated, attempt authentication
-670 if self . state [ "authenticated" ] is False :
-671 # Erase any previous data
-672 self . auth_data = {}
-673 # Loop through 30 seconds
-674 i = 0
-675 r = None
-676 # Prepare the authentication url
-677 url = f " { self . server } /player_api.php?username= { self . username } &password= { self . password } "
-678 self . printx ( "Attempting connection... " , end = '' )
-679 while i < 30 :
-680 try :
-681 # Request authentication, wait 4 seconds maximum
-682 r = requests . get ( url , timeout = ( 4 ), headers = self . connection_headers )
-683 i = 31
-684 except ( requests . exceptions . ConnectionError , requests . exceptions . ReadTimeout ):
-685 time . sleep ( 1 )
-686 print ( f " { i } " , end = '' , flush = True )
-687 i += 1
-688
-689 if r is not None :
-690 # If the answer is ok, process data and change state
-691 if r . ok :
-692 print ( "Connected" )
-693 self . auth_data = r . json ()
-694 self . authorization = {
-695 "username" : self . auth_data [ "user_info" ][ "username" ],
-696 "password" : self . auth_data [ "user_info" ][ "password" ]
-697 }
-698 # Account expiration date
-699 self . account_expiration = timedelta (
-700 seconds = (
-701 int ( self . auth_data [ "user_info" ][ "exp_date" ]) - datetime . now ( timezone . utc ) . timestamp ()
-702 )
-703 )
-704 # Mark connection authorized
-705 self . state [ "authenticated" ] = True
-706 # Construct the base url for all requests
-707 self . base_url = f " { self . server } /player_api.php?username= { self . username } &password= { self . password } "
-708 # If there is a secure server connection, construct the base url SSL for all requests
-709 if "https_port" in self . auth_data [ "server_info" ]:
-710 self . base_url_ssl = f "https:// { self . auth_data [ 'server_info' ][ 'url' ] } : { self . auth_data [ 'server_info' ][ 'https_port' ] } " \
-711 f "/player_api.php?username= { self . username } &password= { self . password } "
-712 self . printx ( f "Account expires in { str ( self . account_expiration ) } " )
-713 else :
-714 print ( "" )
-715 self . printx ( f "Provider ` { self . name } ` could not be loaded. Reason: ` { r . status_code } { r . reason } `" )
-716 else :
-717 self . printx ( f " \n { self . name } : Provider refused the connection" )
+ 648 def authenticate ( self ):
+649 """Authenticate with the provider and initialize base URLs.
+650
+651 Attempts to log in using the player_api.php endpoint. On failure, it triggers
+652 the offline fallback mechanism if a local cache exists.
+653
+654 Sets the authentication state and base URLs for subsequent API calls.
+655 """
+656 # If we have not yet successfully authenticated, attempt authentication
+657 if self . state [ "authenticated" ] is False :
+658 # Erase any previous data
+659 self . auth_data = {}
+660 # Loop through 30 seconds
+661 i = 0
+662 r = None
+663 # Prepare the authentication url
+664 url = f " { self . server } /player_api.php?username= { self . username } &password= { self . password } "
+665 self . printx ( "Attempting connection... " , end = '' )
+666 while i < AUTH_MAX_ATTEMPTS :
+667 try :
+668 # Request authentication, wait AUTH_TIMEOUT_SEC seconds maximum
+669 r = requests . get ( url , timeout = ( AUTH_TIMEOUT_SEC ), headers = self . connection_headers )
+670 if r . ok :
+671 i = AUTH_LOOP_EXIT_VALUE
+672 else :
+673 i += 1
+674 except ( requests . exceptions . ConnectionError , requests . exceptions . ReadTimeout ):
+675 time . sleep ( 1 )
+676 print ( f " { i } " , end = '' , flush = True )
+677 i += 1
+678
+679 if r is not None :
+680 # If the answer is ok, process data and change state
+681 if r . ok :
+682 print ( "Connected" )
+683 self . auth_data = r . json ()
+684 self . authorization = {
+685 "username" : self . auth_data [ "user_info" ][ "username" ],
+686 "password" : self . auth_data [ "user_info" ][ "password" ]
+687 }
+688 # Account expiration date
+689 self . account_expiration = timedelta (
+690 seconds = (
+691 int ( self . auth_data [ "user_info" ][ "exp_date" ]) - datetime . now ( timezone . utc ) . timestamp ()
+692 )
+693 )
+694 # Mark connection authorized
+695 self . state [ "authenticated" ] = True
+696 # Construct the base url for all requests
+697 self . base_url = f " { self . server } /player_api.php?username= { self . username } &password= { self . password } "
+698 # If there is a secure server connection, construct the base url SSL for all requests
+699 if "https_port" in self . auth_data [ "server_info" ]:
+700 self . base_url_ssl = f "https:// { self . auth_data [ 'server_info' ][ 'url' ] } : { self . auth_data [ 'server_info' ][ 'https_port' ] } " \
+701 f "/player_api.php?username= { self . username } &password= { self . password } "
+702 self . printx ( f "Account expires in { str ( self . account_expiration ) } " )
+703 else :
+704 print ( "" )
+705 self . printx ( f "Provider ` { self . name } ` could not be loaded. Reason: ` { r . status_code } { r . reason } `" )
+706 self . _fallback_to_offline ()
+707 else :
+708 self . printx ( f " \n { self . name } : Provider refused the connection" )
+709 self . _fallback_to_offline ()
- Login to provider
+
Authenticate with the provider and initialize base URLs.
+
+
Attempts to log in using the player_api.php endpoint. On failure, it triggers
+the offline fallback mechanism if a local cache exists.
+
+
Sets the authentication state and base URLs for subsequent API calls.
@@ -4635,235 +4400,226 @@
- 778 def load_iptv ( self ) -> bool :
-779 """Load XTream IPTV
-780
-781 - Add all Live TV to XTream.channels
-782 - Add all VOD to XTream.movies
-783 - Add all Series to XTream.series
-784 Series contains Seasons and Episodes. Those are not automatically
-785 retrieved from the server to reduce the loading time.
-786 - Add all groups to XTream.groups
-787 Groups are for all three channel types, Live TV, VOD, and Series
-788
-789 Returns:
-790 bool: True if successful, False if error
-791 """
-792 # If pyxtream has not authenticated the connection, return empty
-793 if self . state [ "authenticated" ] is False :
-794 self . printx ( "Warning, cannot load steams since authorization failed" )
-795 return False
-796
-797 # If pyxtream has already loaded the data, skip and return success
-798 if self . state [ "loaded" ] is True :
-799 self . printx ( "Warning, data has already been loaded." )
-800 return True
-801
-802 # Delete skipped channels from cache
-803 full_filename = osp . join ( self . cache_path , "skipped_streams.json" )
-804 try :
-805 with open ( full_filename , mode = "r+" , encoding = "utf-8" ) as f :
-806 f . truncate ( 0 )
-807 f . close ()
-808 except FileNotFoundError :
-809 pass
-810
-811 for loading_stream_type in ( self . live_type , self . vod_type , self . series_type ):
-812 # Get GROUPS
-813
-814 # Try loading local file
-815 dt = 0
-816 start = timer ()
-817 all_cat = self . _load_from_file ( f "all_groups_ { loading_stream_type } .json" )
-818 # If file empty or does not exists, download it from remote
-819 if all_cat is None :
-820 # Load all Groups and save file locally
-821 all_cat = self . _load_categories_from_provider ( loading_stream_type )
-822 if all_cat is not None :
-823 self . _save_to_file ( all_cat , f "all_groups_ { loading_stream_type } .json" )
-824 dt = timer () - start
-825
-826 # If we got the GROUPS data, show the statistics and load GROUPS
-827 if all_cat is not None :
-828 self . printx ( f "Loaded { len ( all_cat ) } { loading_stream_type } Groups in { dt : .3f } seconds" )
-829 # Add GROUPS to dictionaries
-830
-831 # Add the catch-all-errors group
-832 if loading_stream_type == self . live_type :
-833 self . groups . append ( self . live_catch_all_group )
-834 elif loading_stream_type == self . vod_type :
-835 self . groups . append ( self . vod_catch_all_group )
-836 elif loading_stream_type == self . series_type :
-837 self . groups . append ( self . series_catch_all_group )
-838
-839 for cat_obj in all_cat :
-840 if schemaValidator ( cat_obj , SchemaType . GROUP ):
-841 # Create Group (Category)
-842 new_group = Group ( cat_obj , loading_stream_type )
-843 # Add to xtream class
-844 self . groups . append ( new_group )
-845 else :
-846 # Save what did not pass schema validation
-847 print ( cat_obj )
-848
-849 # Sort Categories
-850 self . groups . sort ( key = lambda x : x . name )
-851 else :
-852 self . printx ( f " - Could not load { loading_stream_type } Groups" )
-853 break
-854
-855 # Get Streams
-856
-857 # Try loading local file
-858 dt = 0
-859 start = timer ()
-860 all_streams = self . _load_from_file ( f "all_stream_ { loading_stream_type } .json" )
-861 # If file empty or does not exists, download it from remote
-862 if all_streams is None :
-863 # Load all Streams and save file locally
-864 all_streams = self . _load_streams_from_provider ( loading_stream_type )
-865 self . _save_to_file ( all_streams , f "all_stream_ { loading_stream_type } .json" )
-866 dt = timer () - start
-867
-868 # If we got the STREAMS data, show the statistics and load Streams
-869 if all_streams is not None :
-870 self . printx ( f "Loaded { len ( all_streams ) } { loading_stream_type } Streams in { dt : .3f } seconds" )
-871 # Add Streams to dictionaries
-872
-873 skipped_adult_content = 0
-874 skipped_no_name_content = 0
-875
-876 self . printx ( f "Processing { loading_stream_type } Streams..." )
-877
-878 start = timer ()
-879 for stream_channel in all_streams :
-880 skip_stream = False
-881
-882 # Validate JSON scheme
-883 if self . validate_json :
-884 if loading_stream_type == self . series_type :
-885 if not schemaValidator ( stream_channel , SchemaType . SERIES_INFO ):
-886 self . printx ( stream_channel )
-887 elif loading_stream_type == self . live_type :
-888 if not schemaValidator ( stream_channel , SchemaType . LIVE ):
-889 self . printx ( stream_channel )
-890 else :
-891 # vod_type
-892 if not schemaValidator ( stream_channel , SchemaType . VOD ):
-893 self . printx ( stream_channel )
-894
-895 # Skip if the name of the stream is empty
-896 if stream_channel [ "name" ] == "" :
-897 skip_stream = True
-898 skipped_no_name_content = skipped_no_name_content + 1
-899 self . _save_to_file_skipped_streams ( stream_channel )
-900
-901 # Skip if the user chose to hide adult streams
-902 if self . hide_adult_content and loading_stream_type == self . live_type :
-903 if "is_adult" in stream_channel :
-904 if stream_channel [ "is_adult" ] == "1" :
-905 skip_stream = True
-906 skipped_adult_content = skipped_adult_content + 1
-907 self . _save_to_file_skipped_streams ( stream_channel )
-908
-909 if not skip_stream :
-910 # Some channels have no group,
-911 # so let's add them to the catch all group
-912 if not stream_channel [ "category_id" ]:
-913 stream_channel [ "category_id" ] = "9999"
-914 elif stream_channel [ "category_id" ] != "1" :
-915 pass
-916
-917 # Find the first occurrence of the group that the
-918 # Channel or Stream is pointing to
-919 the_group = next (
-920 ( x for x in self . groups if x . group_id == int ( stream_channel [ "category_id" ])),
-921 None
-922 )
-923
-924 # Set group title
-925 if the_group is not None :
-926 group_title = the_group . name
-927 else :
-928 if loading_stream_type == self . live_type :
-929 group_title = self . live_catch_all_group . name
-930 the_group = self . live_catch_all_group
-931 elif loading_stream_type == self . vod_type :
-932 group_title = self . vod_catch_all_group . name
-933 the_group = self . vod_catch_all_group
-934 elif loading_stream_type == self . series_type :
-935 group_title = self . series_catch_all_group . name
-936 the_group = self . series_catch_all_group
-937
-938 if loading_stream_type == self . series_type :
-939 # Load all Series
-940 new_series = Serie ( self , stream_channel )
-941 # To get all the Episodes for every Season of each
-942 # Series is very time consuming, we will only
-943 # populate the Series once the user click on the
-944 # Series, the Seasons and Episodes will be loaded
-945 # using x.getSeriesInfoByID() function
-946
-947 else :
-948 new_channel = Channel (
-949 self ,
-950 group_title ,
-951 stream_channel
-952 )
-953
-954 # Save the new channel to the local list of channels
-955 if loading_stream_type == self . live_type :
-956 if new_channel . group_id == "9999" :
-957 self . printx ( f " - xEverythingElse Channel -> { new_channel . name } - { new_channel . stream_type } " )
-958 self . channels . append ( new_channel )
-959 elif loading_stream_type == self . vod_type :
-960 if new_channel . group_id == "9999" :
-961 self . printx ( f " - xEverythingElse Channel -> { new_channel . name } - { new_channel . stream_type } " )
-962 self . movies . append ( new_channel )
-963 if new_channel . age_days_from_added < 31 :
-964 self . movies_30days . append ( new_channel )
-965 if new_channel . age_days_from_added < 7 :
-966 self . movies_7days . append ( new_channel )
-967 else :
-968 self . series . append ( new_series )
-969
-970 # Add stream to the specific Group
-971 if the_group is not None :
-972 if loading_stream_type != self . series_type :
-973 the_group . channels . append ( new_channel )
-974 else :
-975 the_group . series . append ( new_series )
-976 else :
-977 self . printx ( f " - Group not found ` { stream_channel [ 'name' ] } `" )
-978 print ( " \n " )
-979 # Print information of which streams have been skipped
-980 if self . hide_adult_content :
-981 self . printx ( f " - Skipped { skipped_adult_content } adult { loading_stream_type } streams" )
-982 if skipped_no_name_content > 0 :
-983 self . printx ( f " - Skipped { skipped_no_name_content } "
-984 f "unprintable { loading_stream_type } streams" )
-985 else :
-986 self . printx ( f " - Could not load { loading_stream_type } Streams" )
-987
-988 self . state [ "loaded" ] = True
-989 return True
+ 799 def load_iptv ( self ) -> bool :
+ 800 """Orchestrates the loading and processing of all IPTV content.
+ 801
+ 802 Iterates through Live, VOD, and Series types. Loads categories and streams
+ 803 from the local cache if available and fresh, or fetches them from the provider.
+ 804
+ 805 Returns:
+ 806 bool: True if the loading cycle completed successfully.
+ 807 """
+ 808 # If pyxtream has not authenticated the connection, return empty
+ 809 if self . state [ "authenticated" ] is False :
+ 810 self . printx ( "Warning, cannot load steams since authorization failed" )
+ 811 return False
+ 812
+ 813 # If pyxtream has already loaded the data, skip and return success
+ 814 if self . state [ "loaded" ] is True :
+ 815 self . printx ( "Warning, data has already been loaded." )
+ 816 return True
+ 817
+ 818 # Delete skipped channels from cache
+ 819 full_filename = osp . join ( self . cache_path , "skipped_streams.json" )
+ 820 try :
+ 821 with open ( full_filename , mode = "r+" , encoding = "utf-8" ) as f :
+ 822 f . truncate ( 0 )
+ 823 f . close ()
+ 824 except FileNotFoundError :
+ 825 pass
+ 826
+ 827 for loading_stream_type in ( self . live_type , self . vod_type , self . series_type ):
+ 828 # Get GROUPS
+ 829
+ 830 # Try loading local file
+ 831 dt = 0
+ 832 start = timer ()
+ 833 all_cat = self . _load_from_file ( f "all_groups_ { loading_stream_type } .json" )
+ 834 # If file empty or does not exists, download it from remote
+ 835 if all_cat is None :
+ 836 # Load all Groups and save file locally
+ 837 all_cat = self . _load_categories_from_provider ( loading_stream_type )
+ 838 if all_cat is not None :
+ 839 self . _save_to_file ( all_cat , f "all_groups_ { loading_stream_type } .json" )
+ 840 dt = timer () - start
+ 841
+ 842 # If we got the GROUPS data, show the statistics and load GROUPS
+ 843 if all_cat is not None :
+ 844 self . printx ( f "Loaded { len ( all_cat ) } { loading_stream_type } Groups in { dt : .3f } seconds" )
+ 845 # Add GROUPS to dictionaries
+ 846
+ 847 # Add the catch-all-errors group
+ 848 if loading_stream_type == self . live_type :
+ 849 self . groups . append ( self . live_catch_all_group )
+ 850 elif loading_stream_type == self . vod_type :
+ 851 self . groups . append ( self . vod_catch_all_group )
+ 852 elif loading_stream_type == self . series_type :
+ 853 self . groups . append ( self . series_catch_all_group )
+ 854
+ 855 for cat_obj in all_cat :
+ 856 if schemaValidator ( cat_obj , SchemaType . GROUP ):
+ 857 # Create Group (Category)
+ 858 new_group = Group ( cat_obj , loading_stream_type )
+ 859 # Add to xtream class
+ 860 self . groups . append ( new_group )
+ 861 else :
+ 862 # Save what did not pass schema validation
+ 863 print ( cat_obj )
+ 864
+ 865 # Sort Categories
+ 866 self . groups . sort ( key = lambda x : x . name )
+ 867 else :
+ 868 self . printx ( f " - Could not load { loading_stream_type } Groups" )
+ 869 break
+ 870
+ 871 # Get Streams
+ 872
+ 873 # Try loading local file
+ 874 dt = 0
+ 875 start = timer ()
+ 876 all_streams = self . _load_from_file ( f "all_stream_ { loading_stream_type } .json" )
+ 877 # If file empty or does not exists, download it from remote
+ 878 if all_streams is None :
+ 879 # Load all Streams and save file locally
+ 880 all_streams = self . _load_streams_from_provider ( loading_stream_type )
+ 881 self . _save_to_file ( all_streams , f "all_stream_ { loading_stream_type } .json" )
+ 882 dt = timer () - start
+ 883
+ 884 # If we got the STREAMS data, show the statistics and load Streams
+ 885 if all_streams is not None :
+ 886 self . printx ( f "Loaded { len ( all_streams ) } { loading_stream_type } Streams in { dt : .3f } seconds" )
+ 887 # Add Streams to dictionaries
+ 888
+ 889 skipped_adult_content = 0
+ 890 skipped_no_name_content = 0
+ 891
+ 892 self . printx ( f "Processing { loading_stream_type } Streams..." )
+ 893
+ 894 start = timer ()
+ 895 for stream_channel in all_streams :
+ 896 skip_stream = False
+ 897
+ 898 # Validate JSON scheme
+ 899 if self . validate_json :
+ 900 if loading_stream_type == self . series_type :
+ 901 if not schemaValidator ( stream_channel , SchemaType . SERIES_INFO ):
+ 902 self . printx ( stream_channel )
+ 903 elif loading_stream_type == self . live_type :
+ 904 if not schemaValidator ( stream_channel , SchemaType . LIVE ):
+ 905 self . printx ( stream_channel )
+ 906 else :
+ 907 # vod_type
+ 908 if not schemaValidator ( stream_channel , SchemaType . VOD ):
+ 909 self . printx ( stream_channel )
+ 910
+ 911 # Skip if the name of the stream is empty
+ 912 if stream_channel [ "name" ] == "" :
+ 913 skip_stream = True
+ 914 skipped_no_name_content = skipped_no_name_content + 1
+ 915 self . _save_to_file_skipped_streams ( stream_channel )
+ 916
+ 917 # Skip if the user chose to hide adult streams
+ 918 if self . hide_adult_content and loading_stream_type == self . live_type :
+ 919 if "is_adult" in stream_channel :
+ 920 if stream_channel [ "is_adult" ] == "1" :
+ 921 skip_stream = True
+ 922 skipped_adult_content = skipped_adult_content + 1
+ 923 self . _save_to_file_skipped_streams ( stream_channel )
+ 924
+ 925 if not skip_stream :
+ 926 # Some channels have no group,
+ 927 # so let's add them to the catch all group
+ 928 if not stream_channel [ "category_id" ]:
+ 929 stream_channel [ "category_id" ] = str ( CATCH_ALL_CATEGORY_ID )
+ 930 elif stream_channel [ "category_id" ] != "1" :
+ 931 pass
+ 932
+ 933 # Find the first occurrence of the group that the
+ 934 # Channel or Stream is pointing to
+ 935 the_group = next (
+ 936 ( x for x in self . groups if x . group_id == int ( stream_channel [ "category_id" ])),
+ 937 None
+ 938 )
+ 939
+ 940 # Set group title
+ 941 if the_group is not None :
+ 942 group_title = the_group . name
+ 943 else :
+ 944 if loading_stream_type == self . live_type :
+ 945 group_title = self . live_catch_all_group . name
+ 946 the_group = self . live_catch_all_group
+ 947 elif loading_stream_type == self . vod_type :
+ 948 group_title = self . vod_catch_all_group . name
+ 949 the_group = self . vod_catch_all_group
+ 950 elif loading_stream_type == self . series_type :
+ 951 group_title = self . series_catch_all_group . name
+ 952 the_group = self . series_catch_all_group
+ 953
+ 954 if loading_stream_type == self . series_type :
+ 955 # Load all Series
+ 956 new_series = Serie ( self , stream_channel )
+ 957 # To get all the Episodes for every Season of each
+ 958 # Series is very time consuming, we will only
+ 959 # populate the Series once the user click on the
+ 960 # Series, the Seasons and Episodes will be loaded
+ 961 # using x.getSeriesInfoByID() function
+ 962
+ 963 else :
+ 964 new_channel = Channel (
+ 965 self ,
+ 966 group_title ,
+ 967 stream_channel
+ 968 )
+ 969
+ 970 # Save the new channel to the local list of channels
+ 971 if loading_stream_type == self . live_type :
+ 972 if new_channel . group_id == CATCH_ALL_CATEGORY_ID :
+ 973 self . printx ( f " - xEverythingElse Channel -> { new_channel . name } - { new_channel . stream_type } " )
+ 974 self . channels . append ( new_channel )
+ 975 elif loading_stream_type == self . vod_type :
+ 976 if new_channel . group_id == CATCH_ALL_CATEGORY_ID :
+ 977 try :
+ 978 self . printx ( f " - xEverythingElse Channel -> { new_channel . name } - { new_channel . stream_type } " )
+ 979 except AttributeError as e :
+ 980 print ( f " { new_channel . raw } { e } " )
+ 981 self . movies . append ( new_channel )
+ 982 if new_channel . age_days_from_added < MOVIES_RECENT_30_DAYS_THRESHOLD :
+ 983 self . movies_30days . append ( new_channel )
+ 984 if new_channel . age_days_from_added < MOVIES_RECENT_7_DAYS_THRESHOLD :
+ 985 self . movies_7days . append ( new_channel )
+ 986 else :
+ 987 self . series . append ( new_series )
+ 988
+ 989 # Add stream to the specific Group
+ 990 if the_group is not None :
+ 991 if loading_stream_type != self . series_type :
+ 992 the_group . channels . append ( new_channel )
+ 993 else :
+ 994 the_group . series . append ( new_series )
+ 995 else :
+ 996 self . printx ( f " - Group not found ` { stream_channel [ 'name' ] } `" )
+ 997 print ( " \n " )
+ 998 # Print information of which streams have been skipped
+ 999 if self . hide_adult_content :
+1000 self . printx ( f " - Skipped { skipped_adult_content } adult { loading_stream_type } streams" )
+1001 if skipped_no_name_content > 0 :
+1002 self . printx ( f " - Skipped { skipped_no_name_content } "
+1003 f "unprintable { loading_stream_type } streams" )
+1004 else :
+1005 self . printx ( f " - Could not load { loading_stream_type } Streams" )
+1006
+1007 self . state [ "loaded" ] = True
+1008 return True
- Load XTream IPTV
+
Orchestrates the loading and processing of all IPTV content.
-
-Add all Live TV to XTream.channels
-Add all VOD to XTream.movies
-Add all Series to XTream.series
-Series contains Seasons and Episodes. Those are not automatically
-retrieved from the server to reduce the loading time.
-Add all groups to XTream.groups
-Groups are for all three channel types, Live TV, VOD, and Series
-
+
Iterates through Live, VOD, and Series types. Loads categories and streams
+from the local cache if available and fresh, or fetches them from the provider.
Returns:
- bool: True if successful, False if error
+ bool: True if the loading cycle completed successfully.
@@ -4879,43 +4635,43 @@
- 1007 def get_series_info_by_id ( self , get_series : dict ):
-1008 """Get Seasons and Episodes for a Series
-1009
-1010 Args:
-1011 get_series (dict): Series dictionary
-1012 """
-1013
-1014 series_seasons = self . _load_series_info_by_id_from_provider ( get_series . series_id )
-1015
-1016 if series_seasons [ "seasons" ] is None :
-1017 series_seasons [ "seasons" ] = [
-1018 { "name" : "Season 1" , "cover" : series_seasons [ "info" ][ "cover" ]}
-1019 ]
-1020
-1021 for series_info in series_seasons [ "seasons" ]:
-1022 season_name = series_info [ "name" ]
-1023 season = Season ( season_name )
-1024 get_series . seasons [ season_name ] = season
-1025 if "episodes" in series_seasons . keys ():
-1026 for series_season in series_seasons [ "episodes" ] . keys ():
-1027 # add only episodes of current season
-1028 # use series_season as fallback to make sure episodes will be set
-1029 # if we can not parse the season number
-1030 if int ( series_info . get ( 'season_number' , series_season )) != int ( series_season ):
-1031 continue
-1032 for episode_info in series_seasons [ "episodes" ][ str ( series_season )]:
-1033 new_episode_channel = Episode (
-1034 self , series_info , "Testing" , episode_info
-1035 )
-1036 season . episodes [ episode_info [ "title" ]] = new_episode_channel
+ 1033 def get_series_info_by_id ( self , get_series : dict ):
+1034 """Fetch and populate seasons and episodes for a specific series object.
+1035
+1036 Args:
+1037 get_series (Serie): The series object to be populated with detailed data.
+1038 """
+1039
+1040 series_seasons = self . _load_series_info_by_id_from_provider ( get_series . series_id )
+1041
+1042 if series_seasons [ "seasons" ] is None :
+1043 series_seasons [ "seasons" ] = [
+1044 { "name" : "Season 1" , "cover" : series_seasons [ "info" ][ "cover" ]}
+1045 ]
+1046
+1047 for series_info in series_seasons [ "seasons" ]:
+1048 season_name = series_info [ "name" ]
+1049 season = Season ( season_name )
+1050 get_series . seasons [ season_name ] = season
+1051 if "episodes" in series_seasons . keys ():
+1052 for series_season in series_seasons [ "episodes" ] . keys ():
+1053 # add only episodes of current season
+1054 # use series_season as fallback to make sure episodes will be set
+1055 # if we can not parse the season number
+1056 if int ( series_info . get ( 'season_number' , series_season )) != int ( series_season ):
+1057 continue
+1058 for episode_info in series_seasons [ "episodes" ][ str ( series_season )]:
+1059 new_episode_channel = Episode (
+1060 self , series_info , "Testing" , episode_info
+1061 )
+1062 season . episodes [ episode_info [ "title" ]] = new_episode_channel
- Get Seasons and Episodes for a Series
+
Fetch and populate seasons and episodes for a specific series object.
Args:
- get_series (dict): Series dictionary
+ get_series (Serie): The series object to be populated with detailed data.
@@ -4931,12 +4687,22 @@
- 1208 def vodInfoByID ( self , vod_id ):
-1209 return self . _get_request ( api . get_VOD_info_URL_by_ID ( vod_id , self . base_url ), self . base_url )
+ 1220 def vodInfoByID ( self , vod_id ):
+1221 """Fetch VOD information by movie ID.
+1222
+1223 Args:
+1224 vod_id (int|str): The movie ID.
+1225 """
+1226 return self . _get_request ( api . get_VOD_info_URL_by_ID ( vod_id , self . base_url ), self . base_url )
-
+ Fetch VOD information by movie ID.
+
+
Args:
+ vod_id (int|str): The movie ID.
+
+
@@ -4950,12 +4716,22 @@
- 1213 def liveEpgByStream ( self , stream_id ):
-1214 return self . _get_request ( api . get_live_epg_URL_by_stream ( stream_id , self . base_url ))
+ 1230 def liveEpgByStream ( self , stream_id ):
+1231 """Fetch current short EPG data for a live stream.
+1232
+1233 Args:
+1234 stream_id (int|str): The stream ID.
+1235 """
+1236 return self . _get_request ( api . get_live_epg_URL_by_stream ( stream_id , self . base_url ))
-
+ Fetch current short EPG data for a live stream.
+
+
Args:
+ stream_id (int|str): The stream ID.
+
+
@@ -4969,12 +4745,24 @@
- 1216 def liveEpgByStreamAndLimit ( self , stream_id , limit ):
-1217 return self . _get_request ( api . get_live_epg_URL_by_stream_and_limit ( stream_id , limit , self . base_url ))
+ 1238 def liveEpgByStreamAndLimit ( self , stream_id , limit ):
+1239 """Fetch short EPG data for a live stream with a result limit.
+1240
+1241 Args:
+1242 stream_id (int|str): The stream ID.
+1243 limit (int): Maximum number of entries.
+1244 """
+1245 return self . _get_request ( api . get_live_epg_URL_by_stream_and_limit ( stream_id , limit , self . base_url ))
-
+ Fetch short EPG data for a live stream with a result limit.
+
+
Args:
+ stream_id (int|str): The stream ID.
+ limit (int): Maximum number of entries.
+
+
@@ -4988,12 +4776,22 @@
- 1221 def allLiveEpgByStream ( self , stream_id ):
-1222 return self . _get_request ( api . get_all_live_epg_URL_by_stream ( stream_id , self . base_url ))
+ 1249 def allLiveEpgByStream ( self , stream_id ):
+1250 """Fetch all available EPG data for a live stream via simple_data_table.
+1251
+1252 Args:
+1253 stream_id (int|str): The stream ID.
+1254 """
+1255 return self . _get_request ( api . get_all_live_epg_URL_by_stream ( stream_id , self . base_url ))
-
+ Fetch all available EPG data for a live stream via simple_data_table.
+
+
Args:
+ stream_id (int|str): The stream ID.
+
+
@@ -5007,12 +4805,15 @@
- 1225 def allEpg ( self ):
-1226 return self . _get_request ( api . get_all_epg_URL ( self . base_url , self . username , self . password ))
+ 1258 def allEpg ( self ):
+1259 """Fetch the complete XMLTV EPG for all channels."""
+1260 return self . _get_request ( api . get_all_epg_URL ( self . base_url , self . username , self . password ))
-
+ Fetch the complete XMLTV EPG for all channels.
+
+
diff --git a/docs/pyxtream/rest_api.html b/docs/pyxtream/rest_api.html
index 1e9f8a9..c6cff2c 100644
--- a/docs/pyxtream/rest_api.html
+++ b/docs/pyxtream/rest_api.html
@@ -3,14 +3,14 @@
-
+
pyxtream.rest_api API documentation
-
+
@@ -121,119 +121,125 @@
9
10 from flask import Flask
11 from flask import Response as FlaskResponse
- 12
+ 12 from pyxtream.constants import DEFAULT_FLASK_PORT
13
- 14 class EndpointAction ( object ):
- 15
- 16 response : FlaskResponse
- 17
- 18 def __init__ ( self , action , function_name ):
- 19 self . function_name = function_name
- 20 self . action = action
- 21
- 22 def __call__ ( self , ** args ):
- 23 content_types = {
- 24 'html' : "text/html; charset=utf-8" ,
- 25 'json' : "text/json; charset=utf-8"
- 26 }
- 27
- 28 handlers = {
- 29 # Add handlers here
- 30 "stream_search_generic" : lambda : self . _handle_search ( args [ 'term' ]),
- 31 "stream_search_with_type" : lambda : self . _handle_search ( args [ 'term' ], args . get ( 'type' )),
- 32 "download_stream" : lambda : self . action ( str ( args [ 'stream_type' ]), int ( args [ 'stream_id' ])),
- 33 "get_download_progress" : lambda : self . action ( int ( args [ 'stream_id' ])),
- 34 "get_last_7days" : lambda : self . action (),
- 35 "get_last_30days" : lambda : self . action (),
- 36 "home" : lambda : self . action ,
- 37 "get_series" : lambda : self . action ( int ( args [ 'series_id' ]), "JSON" )
- 38 }
- 39
- 40 answer = handlers [ self . function_name ]()
- 41 content_type = content_types [ 'json' ] if self . function_name not in ( 'home' ) else content_types [ 'html' ]
- 42
- 43 self . response = FlaskResponse ( answer , status = 200 , headers = { "Content-Type" : content_type })
- 44 return self . response
- 45
- 46 def _handle_search ( self , term , stream_type = None ):
- 47 regex_term = r "^.* {} .*$" . format ( term )
- 48 if stream_type :
- 49 stream_type = [ stream_type ] if stream_type else ( "series" , "movies" , "channels" )
- 50 return self . action ( regex_term , return_type = 'JSON' , stream_type = stream_type )
- 51 return self . action ( regex_term , return_type = 'JSON' )
- 52
- 53
- 54 class FlaskWrap ( Thread ):
+ 14
+ 15 class EndpointAction ( object ):
+ 16
+ 17 response : FlaskResponse
+ 18
+ 19 def __init__ ( self , action , function_name ):
+ 20 self . function_name = function_name
+ 21 self . action = action
+ 22
+ 23 def __call__ ( self , ** args ):
+ 24 content_types = {
+ 25 'html' : "text/html; charset=utf-8" ,
+ 26 'json' : "text/json; charset=utf-8"
+ 27 }
+ 28
+ 29 handlers = {
+ 30 # Add handlers here
+ 31 "stream_search_generic" : lambda : self . _handle_search ( args [ 'term' ]),
+ 32 "stream_search_with_type" : lambda : self . _handle_search ( args [ 'term' ], args . get ( 'type' )),
+ 33 "download_stream" : lambda : self . action ( int ( args [ 'stream_id' ])),
+ 34 "get_download_progress" : lambda : self . action ( int ( args [ 'stream_id' ])),
+ 35 "get_last_7days" : lambda : self . action (),
+ 36 "get_last_30days" : lambda : self . action (),
+ 37 "home" : lambda : self . action ,
+ 38 "get_state" : lambda : self . action (),
+ 39 "get_series" : lambda : self . action ( int ( args [ 'series_id' ]), "JSON" )
+ 40 }
+ 41
+ 42 answer = handlers [ self . function_name ]()
+ 43 content_type = content_types [ 'json' ] if self . function_name not in ( 'home' ) else content_types [ 'html' ]
+ 44
+ 45 self . response = FlaskResponse ( answer , status = 200 , headers = { "Content-Type" : content_type })
+ 46 return self . response
+ 47
+ 48 def _handle_search ( self , term , stream_type = None ):
+ 49 regex_term = r "^.* {} .*$" . format ( term )
+ 50 if stream_type :
+ 51 stream_type = [ stream_type ] if stream_type else ( "series" , "movies" , "channels" )
+ 52 return self . action ( regex_term , return_type = 'JSON' , stream_type = stream_type )
+ 53 return self . action ( regex_term , return_type = 'JSON' )
+ 54
55
- 56 home_template = """
- 57 <!DOCTYPE html><html lang="en"><head></head><body>pyxtream API</body></html>
- 58 """
- 59
- 60 host : str = ""
- 61 port : int = 0
- 62
- 63 def __init__ ( self , name , xtream : object , html_template_folder : str = "" ,
- 64 host : str = "0.0.0.0" , port : int = 5000 , debug : bool = True
- 65 ):
- 66
- 67 log = logging . getLogger ( 'werkzeug' )
- 68 log . setLevel ( logging . ERROR )
- 69
- 70 self . host = host
- 71 self . port = port
- 72 self . debug = debug
- 73
- 74 self . app = Flask ( name )
- 75 self . xt = xtream
- 76 Thread . __init__ ( self )
- 77
- 78 # Configure Thread
- 79 self . name = "pyxtream REST API"
- 80 self . daemon = True
- 81
- 82 # Load HTML Home Template if any
- 83 if html_template_folder != "" :
- 84 self . home_template_file_name = path . join ( html_template_folder , "index.html" )
- 85 if path . isfile ( self . home_template_file_name ):
- 86 with open ( self . home_template_file_name , 'r' , encoding = "utf-8" ) as home_html :
- 87 self . home_template = home_html . read ()
- 88
- 89 # Add all endpoints
- 90 self . add_endpoint ( endpoint = '/' , endpoint_name = 'home' , handler = [ self . home_template , "home" ])
- 91 self . add_endpoint ( endpoint = '/stream_search/<term>' ,
- 92 endpoint_name = 'stream_search_generic' ,
- 93 handler = [ self . xt . search_stream , 'stream_search_generic' ]
- 94 )
- 95 self . add_endpoint ( endpoint = '/stream_search/<term>/<type>' ,
- 96 endpoint_name = 'stream_search_with_type' ,
- 97 handler = [ self . xt . search_stream , 'stream_search_with_type' ]
- 98 )
- 99 self . add_endpoint ( endpoint = '/download_stream/<stream_type>/<stream_id>/' ,
-100 endpoint_name = 'download_stream' ,
-101 handler = [ self . xt . download_video , "download_stream" ]
-102 )
-103 self . add_endpoint ( endpoint = '/get_download_progress/<stream_id>/' ,
-104 endpoint_name = 'get_download_progress' ,
-105 handler = [ self . xt . get_download_progress , "get_download_progress" ]
-106 )
-107 self . add_endpoint ( endpoint = '/get_last_7days' ,
-108 endpoint_name = 'get_last_7days' ,
-109 handler = [ self . xt . get_last_7days , "get_last_7days" ]
-110 )
-111 self . add_endpoint ( endpoint = '/get_last_30days' ,
-112 endpoint_name = 'get_last_30days' ,
-113 handler = [ self . xt . get_last_30days , "get_last_30days" ]
-114 )
-115 self . add_endpoint ( endpoint = '/get_series/<series_id>' ,
-116 endpoint_name = 'get_series' ,
-117 handler = [ self . xt . _load_series_info_by_id_from_provider , "get_series" ]
-118 )
-119
-120 def run ( self ):
-121 self . app . run ( debug = self . debug , use_reloader = False , host = self . host , port = self . port )
-122
-123 def add_endpoint ( self , endpoint = None , endpoint_name = None , handler = None ):
-124 self . app . add_url_rule ( endpoint , endpoint_name , EndpointAction ( * handler ))
+ 56 class FlaskWrap ( Thread ):
+ 57
+ 58 home_template = """
+ 59 <!DOCTYPE html><html lang="en"><head></head><body>pyxtream API</body></html>
+ 60 """
+ 61
+ 62 host : str = ""
+ 63 port : int = 0
+ 64
+ 65 def __init__ ( self , name , xtream : object , html_template_folder : str = "" ,
+ 66 host : str = "0.0.0.0" , port : int = DEFAULT_FLASK_PORT , debug : bool = True
+ 67 ):
+ 68
+ 69 log = logging . getLogger ( 'werkzeug' )
+ 70 log . setLevel ( logging . ERROR )
+ 71
+ 72 self . host = host
+ 73 self . port = port
+ 74 self . debug = debug
+ 75
+ 76 self . app = Flask ( name )
+ 77 self . xt = xtream
+ 78 Thread . __init__ ( self )
+ 79
+ 80 # Configure Thread
+ 81 self . name = "pyxtream REST API"
+ 82 self . daemon = True
+ 83
+ 84 # Load HTML Home Template if any
+ 85 if html_template_folder != "" :
+ 86 self . home_template_file_name = path . join ( html_template_folder , "index.html" )
+ 87 if path . isfile ( self . home_template_file_name ):
+ 88 with open ( self . home_template_file_name , 'r' , encoding = "utf-8" ) as home_html :
+ 89 self . home_template = home_html . read ()
+ 90
+ 91 # Add all endpoints
+ 92 self . add_endpoint ( endpoint = '/' , endpoint_name = 'home' , handler = [ self . home_template , "home" ])
+ 93 self . add_endpoint ( endpoint = '/stream_search/<term>' ,
+ 94 endpoint_name = 'stream_search_generic' ,
+ 95 handler = [ self . xt . search_stream , 'stream_search_generic' ]
+ 96 )
+ 97 self . add_endpoint ( endpoint = '/stream_search/<term>/<type>' ,
+ 98 endpoint_name = 'stream_search_with_type' ,
+ 99 handler = [ self . xt . search_stream , 'stream_search_with_type' ]
+100 )
+101 self . add_endpoint ( endpoint = '/download_stream/<stream_type>/<stream_id>/' ,
+102 endpoint_name = 'download_stream' ,
+103 handler = [ self . xt . download_video , "download_stream" ]
+104 )
+105 self . add_endpoint ( endpoint = '/get_download_progress/<stream_id>/' ,
+106 endpoint_name = 'get_download_progress' ,
+107 handler = [ self . xt . get_download_progress , "get_download_progress" ]
+108 )
+109 self . add_endpoint ( endpoint = '/get_last_7days' ,
+110 endpoint_name = 'get_last_7days' ,
+111 handler = [ self . xt . get_last_7days , "get_last_7days" ]
+112 )
+113 self . add_endpoint ( endpoint = '/get_last_30days' ,
+114 endpoint_name = 'get_last_30days' ,
+115 handler = [ self . xt . get_last_30days , "get_last_30days" ]
+116 )
+117 self . add_endpoint ( endpoint = '/get_series/<series_id>' ,
+118 endpoint_name = 'get_series' ,
+119 handler = [ self . xt . _load_series_info_by_id_from_provider , "get_series" ]
+120 )
+121 self . add_endpoint ( endpoint = '/get_state' ,
+122 endpoint_name = 'get_state' ,
+123 handler = [ self . xt . get_state , "get_state" ]
+124 )
+125
+126 def run ( self ):
+127 self . app . run ( debug = self . debug , use_reloader = False , host = self . host , port = self . port )
+128
+129 def add_endpoint ( self , endpoint = None , endpoint_name = None , handler = None ):
+130 self . app . add_url_rule ( endpoint , endpoint_name , EndpointAction ( * handler ))
@@ -249,44 +255,45 @@
- 15 class EndpointAction ( object ):
-16
-17 response : FlaskResponse
-18
-19 def __init__ ( self , action , function_name ):
-20 self . function_name = function_name
-21 self . action = action
-22
-23 def __call__ ( self , ** args ):
-24 content_types = {
-25 'html' : "text/html; charset=utf-8" ,
-26 'json' : "text/json; charset=utf-8"
-27 }
-28
-29 handlers = {
-30 # Add handlers here
-31 "stream_search_generic" : lambda : self . _handle_search ( args [ 'term' ]),
-32 "stream_search_with_type" : lambda : self . _handle_search ( args [ 'term' ], args . get ( 'type' )),
-33 "download_stream" : lambda : self . action ( str ( args [ 'stream_type' ]), int ( args [ 'stream_id' ])),
-34 "get_download_progress" : lambda : self . action ( int ( args [ 'stream_id' ])),
-35 "get_last_7days" : lambda : self . action (),
-36 "get_last_30days" : lambda : self . action (),
-37 "home" : lambda : self . action ,
-38 "get_series" : lambda : self . action ( int ( args [ 'series_id' ]), "JSON" )
-39 }
-40
-41 answer = handlers [ self . function_name ]()
-42 content_type = content_types [ 'json' ] if self . function_name not in ( 'home' ) else content_types [ 'html' ]
-43
-44 self . response = FlaskResponse ( answer , status = 200 , headers = { "Content-Type" : content_type })
-45 return self . response
-46
-47 def _handle_search ( self , term , stream_type = None ):
-48 regex_term = r "^.* {} .*$" . format ( term )
-49 if stream_type :
-50 stream_type = [ stream_type ] if stream_type else ( "series" , "movies" , "channels" )
-51 return self . action ( regex_term , return_type = 'JSON' , stream_type = stream_type )
-52 return self . action ( regex_term , return_type = 'JSON' )
+ 16 class EndpointAction ( object ):
+17
+18 response : FlaskResponse
+19
+20 def __init__ ( self , action , function_name ):
+21 self . function_name = function_name
+22 self . action = action
+23
+24 def __call__ ( self , ** args ):
+25 content_types = {
+26 'html' : "text/html; charset=utf-8" ,
+27 'json' : "text/json; charset=utf-8"
+28 }
+29
+30 handlers = {
+31 # Add handlers here
+32 "stream_search_generic" : lambda : self . _handle_search ( args [ 'term' ]),
+33 "stream_search_with_type" : lambda : self . _handle_search ( args [ 'term' ], args . get ( 'type' )),
+34 "download_stream" : lambda : self . action ( int ( args [ 'stream_id' ])),
+35 "get_download_progress" : lambda : self . action ( int ( args [ 'stream_id' ])),
+36 "get_last_7days" : lambda : self . action (),
+37 "get_last_30days" : lambda : self . action (),
+38 "home" : lambda : self . action ,
+39 "get_state" : lambda : self . action (),
+40 "get_series" : lambda : self . action ( int ( args [ 'series_id' ]), "JSON" )
+41 }
+42
+43 answer = handlers [ self . function_name ]()
+44 content_type = content_types [ 'json' ] if self . function_name not in ( 'home' ) else content_types [ 'html' ]
+45
+46 self . response = FlaskResponse ( answer , status = 200 , headers = { "Content-Type" : content_type })
+47 return self . response
+48
+49 def _handle_search ( self , term , stream_type = None ):
+50 regex_term = r "^.* {} .*$" . format ( term )
+51 if stream_type :
+52 stream_type = [ stream_type ] if stream_type else ( "series" , "movies" , "channels" )
+53 return self . action ( regex_term , return_type = 'JSON' , stream_type = stream_type )
+54 return self . action ( regex_term , return_type = 'JSON' )
@@ -302,9 +309,9 @@
- 19 def __init__ ( self , action , function_name ):
-20 self . function_name = function_name
-21 self . action = action
+ 20 def __init__ ( self , action , function_name ):
+21 self . function_name = function_name
+22 self . action = action
@@ -356,77 +363,81 @@
- 55 class FlaskWrap ( Thread ):
- 56
- 57 home_template = """
- 58 <!DOCTYPE html><html lang="en"><head></head><body>pyxtream API</body></html>
- 59 """
- 60
- 61 host : str = ""
- 62 port : int = 0
- 63
- 64 def __init__ ( self , name , xtream : object , html_template_folder : str = "" ,
- 65 host : str = "0.0.0.0" , port : int = 5000 , debug : bool = True
- 66 ):
- 67
- 68 log = logging . getLogger ( 'werkzeug' )
- 69 log . setLevel ( logging . ERROR )
- 70
- 71 self . host = host
- 72 self . port = port
- 73 self . debug = debug
- 74
- 75 self . app = Flask ( name )
- 76 self . xt = xtream
- 77 Thread . __init__ ( self )
- 78
- 79 # Configure Thread
- 80 self . name = "pyxtream REST API"
- 81 self . daemon = True
- 82
- 83 # Load HTML Home Template if any
- 84 if html_template_folder != "" :
- 85 self . home_template_file_name = path . join ( html_template_folder , "index.html" )
- 86 if path . isfile ( self . home_template_file_name ):
- 87 with open ( self . home_template_file_name , 'r' , encoding = "utf-8" ) as home_html :
- 88 self . home_template = home_html . read ()
- 89
- 90 # Add all endpoints
- 91 self . add_endpoint ( endpoint = '/' , endpoint_name = 'home' , handler = [ self . home_template , "home" ])
- 92 self . add_endpoint ( endpoint = '/stream_search/<term>' ,
- 93 endpoint_name = 'stream_search_generic' ,
- 94 handler = [ self . xt . search_stream , 'stream_search_generic' ]
- 95 )
- 96 self . add_endpoint ( endpoint = '/stream_search/<term>/<type>' ,
- 97 endpoint_name = 'stream_search_with_type' ,
- 98 handler = [ self . xt . search_stream , 'stream_search_with_type' ]
- 99 )
-100 self . add_endpoint ( endpoint = '/download_stream/<stream_type>/<stream_id>/' ,
-101 endpoint_name = 'download_stream' ,
-102 handler = [ self . xt . download_video , "download_stream" ]
-103 )
-104 self . add_endpoint ( endpoint = '/get_download_progress/<stream_id>/' ,
-105 endpoint_name = 'get_download_progress' ,
-106 handler = [ self . xt . get_download_progress , "get_download_progress" ]
-107 )
-108 self . add_endpoint ( endpoint = '/get_last_7days' ,
-109 endpoint_name = 'get_last_7days' ,
-110 handler = [ self . xt . get_last_7days , "get_last_7days" ]
-111 )
-112 self . add_endpoint ( endpoint = '/get_last_30days' ,
-113 endpoint_name = 'get_last_30days' ,
-114 handler = [ self . xt . get_last_30days , "get_last_30days" ]
-115 )
-116 self . add_endpoint ( endpoint = '/get_series/<series_id>' ,
-117 endpoint_name = 'get_series' ,
-118 handler = [ self . xt . _load_series_info_by_id_from_provider , "get_series" ]
-119 )
-120
-121 def run ( self ):
-122 self . app . run ( debug = self . debug , use_reloader = False , host = self . host , port = self . port )
-123
-124 def add_endpoint ( self , endpoint = None , endpoint_name = None , handler = None ):
-125 self . app . add_url_rule ( endpoint , endpoint_name , EndpointAction ( * handler ))
+ 57 class FlaskWrap ( Thread ):
+ 58
+ 59 home_template = """
+ 60 <!DOCTYPE html><html lang="en"><head></head><body>pyxtream API</body></html>
+ 61 """
+ 62
+ 63 host : str = ""
+ 64 port : int = 0
+ 65
+ 66 def __init__ ( self , name , xtream : object , html_template_folder : str = "" ,
+ 67 host : str = "0.0.0.0" , port : int = DEFAULT_FLASK_PORT , debug : bool = True
+ 68 ):
+ 69
+ 70 log = logging . getLogger ( 'werkzeug' )
+ 71 log . setLevel ( logging . ERROR )
+ 72
+ 73 self . host = host
+ 74 self . port = port
+ 75 self . debug = debug
+ 76
+ 77 self . app = Flask ( name )
+ 78 self . xt = xtream
+ 79 Thread . __init__ ( self )
+ 80
+ 81 # Configure Thread
+ 82 self . name = "pyxtream REST API"
+ 83 self . daemon = True
+ 84
+ 85 # Load HTML Home Template if any
+ 86 if html_template_folder != "" :
+ 87 self . home_template_file_name = path . join ( html_template_folder , "index.html" )
+ 88 if path . isfile ( self . home_template_file_name ):
+ 89 with open ( self . home_template_file_name , 'r' , encoding = "utf-8" ) as home_html :
+ 90 self . home_template = home_html . read ()
+ 91
+ 92 # Add all endpoints
+ 93 self . add_endpoint ( endpoint = '/' , endpoint_name = 'home' , handler = [ self . home_template , "home" ])
+ 94 self . add_endpoint ( endpoint = '/stream_search/<term>' ,
+ 95 endpoint_name = 'stream_search_generic' ,
+ 96 handler = [ self . xt . search_stream , 'stream_search_generic' ]
+ 97 )
+ 98 self . add_endpoint ( endpoint = '/stream_search/<term>/<type>' ,
+ 99 endpoint_name = 'stream_search_with_type' ,
+100 handler = [ self . xt . search_stream , 'stream_search_with_type' ]
+101 )
+102 self . add_endpoint ( endpoint = '/download_stream/<stream_type>/<stream_id>/' ,
+103 endpoint_name = 'download_stream' ,
+104 handler = [ self . xt . download_video , "download_stream" ]
+105 )
+106 self . add_endpoint ( endpoint = '/get_download_progress/<stream_id>/' ,
+107 endpoint_name = 'get_download_progress' ,
+108 handler = [ self . xt . get_download_progress , "get_download_progress" ]
+109 )
+110 self . add_endpoint ( endpoint = '/get_last_7days' ,
+111 endpoint_name = 'get_last_7days' ,
+112 handler = [ self . xt . get_last_7days , "get_last_7days" ]
+113 )
+114 self . add_endpoint ( endpoint = '/get_last_30days' ,
+115 endpoint_name = 'get_last_30days' ,
+116 handler = [ self . xt . get_last_30days , "get_last_30days" ]
+117 )
+118 self . add_endpoint ( endpoint = '/get_series/<series_id>' ,
+119 endpoint_name = 'get_series' ,
+120 handler = [ self . xt . _load_series_info_by_id_from_provider , "get_series" ]
+121 )
+122 self . add_endpoint ( endpoint = '/get_state' ,
+123 endpoint_name = 'get_state' ,
+124 handler = [ self . xt . get_state , "get_state" ]
+125 )
+126
+127 def run ( self ):
+128 self . app . run ( debug = self . debug , use_reloader = False , host = self . host , port = self . port )
+129
+130 def add_endpoint ( self , endpoint = None , endpoint_name = None , handler = None ):
+131 self . app . add_url_rule ( endpoint , endpoint_name , EndpointAction ( * handler ))
@@ -448,62 +459,66 @@
- 64 def __init__ ( self , name , xtream : object , html_template_folder : str = "" ,
- 65 host : str = "0.0.0.0" , port : int = 5000 , debug : bool = True
- 66 ):
- 67
- 68 log = logging . getLogger ( 'werkzeug' )
- 69 log . setLevel ( logging . ERROR )
- 70
- 71 self . host = host
- 72 self . port = port
- 73 self . debug = debug
- 74
- 75 self . app = Flask ( name )
- 76 self . xt = xtream
- 77 Thread . __init__ ( self )
- 78
- 79 # Configure Thread
- 80 self . name = "pyxtream REST API"
- 81 self . daemon = True
- 82
- 83 # Load HTML Home Template if any
- 84 if html_template_folder != "" :
- 85 self . home_template_file_name = path . join ( html_template_folder , "index.html" )
- 86 if path . isfile ( self . home_template_file_name ):
- 87 with open ( self . home_template_file_name , 'r' , encoding = "utf-8" ) as home_html :
- 88 self . home_template = home_html . read ()
- 89
- 90 # Add all endpoints
- 91 self . add_endpoint ( endpoint = '/' , endpoint_name = 'home' , handler = [ self . home_template , "home" ])
- 92 self . add_endpoint ( endpoint = '/stream_search/<term>' ,
- 93 endpoint_name = 'stream_search_generic' ,
- 94 handler = [ self . xt . search_stream , 'stream_search_generic' ]
- 95 )
- 96 self . add_endpoint ( endpoint = '/stream_search/<term>/<type>' ,
- 97 endpoint_name = 'stream_search_with_type' ,
- 98 handler = [ self . xt . search_stream , 'stream_search_with_type' ]
- 99 )
-100 self . add_endpoint ( endpoint = '/download_stream/<stream_type>/<stream_id>/' ,
-101 endpoint_name = 'download_stream' ,
-102 handler = [ self . xt . download_video , "download_stream" ]
-103 )
-104 self . add_endpoint ( endpoint = '/get_download_progress/<stream_id>/' ,
-105 endpoint_name = 'get_download_progress' ,
-106 handler = [ self . xt . get_download_progress , "get_download_progress" ]
-107 )
-108 self . add_endpoint ( endpoint = '/get_last_7days' ,
-109 endpoint_name = 'get_last_7days' ,
-110 handler = [ self . xt . get_last_7days , "get_last_7days" ]
-111 )
-112 self . add_endpoint ( endpoint = '/get_last_30days' ,
-113 endpoint_name = 'get_last_30days' ,
-114 handler = [ self . xt . get_last_30days , "get_last_30days" ]
-115 )
-116 self . add_endpoint ( endpoint = '/get_series/<series_id>' ,
-117 endpoint_name = 'get_series' ,
-118 handler = [ self . xt . _load_series_info_by_id_from_provider , "get_series" ]
-119 )
+ 66 def __init__ ( self , name , xtream : object , html_template_folder : str = "" ,
+ 67 host : str = "0.0.0.0" , port : int = DEFAULT_FLASK_PORT , debug : bool = True
+ 68 ):
+ 69
+ 70 log = logging . getLogger ( 'werkzeug' )
+ 71 log . setLevel ( logging . ERROR )
+ 72
+ 73 self . host = host
+ 74 self . port = port
+ 75 self . debug = debug
+ 76
+ 77 self . app = Flask ( name )
+ 78 self . xt = xtream
+ 79 Thread . __init__ ( self )
+ 80
+ 81 # Configure Thread
+ 82 self . name = "pyxtream REST API"
+ 83 self . daemon = True
+ 84
+ 85 # Load HTML Home Template if any
+ 86 if html_template_folder != "" :
+ 87 self . home_template_file_name = path . join ( html_template_folder , "index.html" )
+ 88 if path . isfile ( self . home_template_file_name ):
+ 89 with open ( self . home_template_file_name , 'r' , encoding = "utf-8" ) as home_html :
+ 90 self . home_template = home_html . read ()
+ 91
+ 92 # Add all endpoints
+ 93 self . add_endpoint ( endpoint = '/' , endpoint_name = 'home' , handler = [ self . home_template , "home" ])
+ 94 self . add_endpoint ( endpoint = '/stream_search/<term>' ,
+ 95 endpoint_name = 'stream_search_generic' ,
+ 96 handler = [ self . xt . search_stream , 'stream_search_generic' ]
+ 97 )
+ 98 self . add_endpoint ( endpoint = '/stream_search/<term>/<type>' ,
+ 99 endpoint_name = 'stream_search_with_type' ,
+100 handler = [ self . xt . search_stream , 'stream_search_with_type' ]
+101 )
+102 self . add_endpoint ( endpoint = '/download_stream/<stream_type>/<stream_id>/' ,
+103 endpoint_name = 'download_stream' ,
+104 handler = [ self . xt . download_video , "download_stream" ]
+105 )
+106 self . add_endpoint ( endpoint = '/get_download_progress/<stream_id>/' ,
+107 endpoint_name = 'get_download_progress' ,
+108 handler = [ self . xt . get_download_progress , "get_download_progress" ]
+109 )
+110 self . add_endpoint ( endpoint = '/get_last_7days' ,
+111 endpoint_name = 'get_last_7days' ,
+112 handler = [ self . xt . get_last_7days , "get_last_7days" ]
+113 )
+114 self . add_endpoint ( endpoint = '/get_last_30days' ,
+115 endpoint_name = 'get_last_30days' ,
+116 handler = [ self . xt . get_last_30days , "get_last_30days" ]
+117 )
+118 self . add_endpoint ( endpoint = '/get_series/<series_id>' ,
+119 endpoint_name = 'get_series' ,
+120 handler = [ self . xt . _load_series_info_by_id_from_provider , "get_series" ]
+121 )
+122 self . add_endpoint ( endpoint = '/get_state' ,
+123 endpoint_name = 'get_state' ,
+124 handler = [ self . xt . get_state , "get_state" ]
+125 )
@@ -678,8 +693,8 @@
- 121 def run ( self ):
-122 self . app . run ( debug = self . debug , use_reloader = False , host = self . host , port = self . port )
+ 127 def run ( self ):
+128 self . app . run ( debug = self . debug , use_reloader = False , host = self . host , port = self . port )
@@ -704,8 +719,8 @@
- 124 def add_endpoint ( self , endpoint = None , endpoint_name = None , handler = None ):
-125 self . app . add_url_rule ( endpoint , endpoint_name , EndpointAction ( * handler ))
+ 130 def add_endpoint ( self , endpoint = None , endpoint_name = None , handler = None ):
+131 self . app . add_url_rule ( endpoint , endpoint_name , EndpointAction ( * handler ))
diff --git a/docs/pyxtream/schemaValidator.html b/docs/pyxtream/schemaValidator.html
index 00e5152..e2bd7d2 100644
--- a/docs/pyxtream/schemaValidator.html
+++ b/docs/pyxtream/schemaValidator.html
@@ -3,14 +3,14 @@
-
+
pyxtream.schemaValidator API documentation
-
+
@@ -389,14 +389,16 @@
291 elif ( schemaType == SchemaType . GROUP ):
292 json_schema = group_schema
293 else :
-294 json_schema = " {} "
+294 return False
295
296 try :
297 validate ( instance = jsonData , schema = json_schema )
298 except exceptions . ValidationError as err :
299 print ( err )
300 return False
-301 return True
+301 except exceptions . SchemaError :
+302 return False
+303 return True
@@ -600,14 +602,16 @@
293 elif ( schemaType == SchemaType . GROUP ):
294 json_schema = group_schema
295 else :
-296 json_schema = " {} "
+296 return False
297
298 try :
299 validate ( instance = jsonData , schema = json_schema )
300 except exceptions . ValidationError as err :
301 print ( err )
302 return False
-303 return True
+303 except exceptions . SchemaError :
+304 return False
+305 return True
diff --git a/docs/pyxtream/version.html b/docs/pyxtream/version.html
index 71fcca5..64f6d2d 100644
--- a/docs/pyxtream/version.html
+++ b/docs/pyxtream/version.html
@@ -3,14 +3,14 @@
-
+
pyxtream.version API documentation
-
+
@@ -51,7 +51,7 @@
View Source
- 1 __version__ = '0.8.0'
+ 1 __version__ = '0.9.0'
2 __author__ = 'Claudio Olmi'
3 __author_email__ = 'superolmo2@gmail.com'
diff --git a/docs/search.js b/docs/search.js
index 17a57e5..b0937b0 100644
--- a/docs/search.js
+++ b/docs/search.js
@@ -1,6 +1,6 @@
window.pdocSearch = (function(){
/** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o\n"}, "pyxtream.api": {"fullname": "pyxtream.api", "modulename": "pyxtream.api", "kind": "module", "doc": "API URL builders
\n"}, "pyxtream.api.get_live_categories_URL": {"fullname": "pyxtream.api.get_live_categories_URL", "modulename": "pyxtream.api", "qualname": "get_live_categories_URL", "kind": "function", "doc": "
\n", "signature": "(base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_live_streams_URL": {"fullname": "pyxtream.api.get_live_streams_URL", "modulename": "pyxtream.api", "qualname": "get_live_streams_URL", "kind": "function", "doc": "
\n", "signature": "(base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_live_streams_URL_by_category": {"fullname": "pyxtream.api.get_live_streams_URL_by_category", "modulename": "pyxtream.api", "qualname": "get_live_streams_URL_by_category", "kind": "function", "doc": "
\n", "signature": "(category_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_vod_cat_URL": {"fullname": "pyxtream.api.get_vod_cat_URL", "modulename": "pyxtream.api", "qualname": "get_vod_cat_URL", "kind": "function", "doc": "
\n", "signature": "(base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_vod_streams_URL": {"fullname": "pyxtream.api.get_vod_streams_URL", "modulename": "pyxtream.api", "qualname": "get_vod_streams_URL", "kind": "function", "doc": "
\n", "signature": "(base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_vod_streams_URL_by_category": {"fullname": "pyxtream.api.get_vod_streams_URL_by_category", "modulename": "pyxtream.api", "qualname": "get_vod_streams_URL_by_category", "kind": "function", "doc": "
\n", "signature": "(category_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_series_cat_URL": {"fullname": "pyxtream.api.get_series_cat_URL", "modulename": "pyxtream.api", "qualname": "get_series_cat_URL", "kind": "function", "doc": "
\n", "signature": "(base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_series_URL": {"fullname": "pyxtream.api.get_series_URL", "modulename": "pyxtream.api", "qualname": "get_series_URL", "kind": "function", "doc": "
\n", "signature": "(base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_series_URL_by_category": {"fullname": "pyxtream.api.get_series_URL_by_category", "modulename": "pyxtream.api", "qualname": "get_series_URL_by_category", "kind": "function", "doc": "
\n", "signature": "(category_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_series_info_URL_by_ID": {"fullname": "pyxtream.api.get_series_info_URL_by_ID", "modulename": "pyxtream.api", "qualname": "get_series_info_URL_by_ID", "kind": "function", "doc": "
\n", "signature": "(series_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_VOD_info_URL_by_ID": {"fullname": "pyxtream.api.get_VOD_info_URL_by_ID", "modulename": "pyxtream.api", "qualname": "get_VOD_info_URL_by_ID", "kind": "function", "doc": "
\n", "signature": "(vod_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_live_epg_URL_by_stream": {"fullname": "pyxtream.api.get_live_epg_URL_by_stream", "modulename": "pyxtream.api", "qualname": "get_live_epg_URL_by_stream", "kind": "function", "doc": "
\n", "signature": "(stream_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"fullname": "pyxtream.api.get_live_epg_URL_by_stream_and_limit", "modulename": "pyxtream.api", "qualname": "get_live_epg_URL_by_stream_and_limit", "kind": "function", "doc": "
\n", "signature": "(stream_id , limit , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"fullname": "pyxtream.api.get_all_live_epg_URL_by_stream", "modulename": "pyxtream.api", "qualname": "get_all_live_epg_URL_by_stream", "kind": "function", "doc": "
\n", "signature": "(stream_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_all_epg_URL": {"fullname": "pyxtream.api.get_all_epg_URL", "modulename": "pyxtream.api", "qualname": "get_all_epg_URL", "kind": "function", "doc": "
\n", "signature": "(base : str , username : str , password : str ) -> str : ", "funcdef": "def"}, "pyxtream.pyxtream": {"fullname": "pyxtream.pyxtream", "modulename": "pyxtream.pyxtream", "kind": "module", "doc": "pyxtream
\n\nModule handles downloading xtream data.
\n\nPart of this content comes from
\n\n\n\n\n _Author_: Claudio Olmi\n _Github_: superolmo
\n \n\n\n _Note_: It does not support M3U
\n \n"}, "pyxtream.pyxtream.SSL_FIRST": {"fullname": "pyxtream.pyxtream.SSL_FIRST", "modulename": "pyxtream.pyxtream", "qualname": "SSL_FIRST", "kind": "variable", "doc": "
\n", "default_value": "True"}, "pyxtream.pyxtream.Channel": {"fullname": "pyxtream.pyxtream.Channel", "modulename": "pyxtream.pyxtream", "qualname": "Channel", "kind": "class", "doc": "
\n"}, "pyxtream.pyxtream.Channel.__init__": {"fullname": "pyxtream.pyxtream.Channel.__init__", "modulename": "pyxtream.pyxtream", "qualname": "Channel.__init__", "kind": "function", "doc": "
\n", "signature": "(xtream : object , group_title , stream_info ) "}, "pyxtream.pyxtream.Channel.info": {"fullname": "pyxtream.pyxtream.Channel.info", "modulename": "pyxtream.pyxtream", "qualname": "Channel.info", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Channel.id": {"fullname": "pyxtream.pyxtream.Channel.id", "modulename": "pyxtream.pyxtream", "qualname": "Channel.id", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Channel.name": {"fullname": "pyxtream.pyxtream.Channel.name", "modulename": "pyxtream.pyxtream", "qualname": "Channel.name", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Channel.logo": {"fullname": "pyxtream.pyxtream.Channel.logo", "modulename": "pyxtream.pyxtream", "qualname": "Channel.logo", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Channel.logo_path": {"fullname": "pyxtream.pyxtream.Channel.logo_path", "modulename": "pyxtream.pyxtream", "qualname": "Channel.logo_path", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Channel.group_title": {"fullname": "pyxtream.pyxtream.Channel.group_title", "modulename": "pyxtream.pyxtream", "qualname": "Channel.group_title", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Channel.title": {"fullname": "pyxtream.pyxtream.Channel.title", "modulename": "pyxtream.pyxtream", "qualname": "Channel.title", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Channel.url": {"fullname": "pyxtream.pyxtream.Channel.url", "modulename": "pyxtream.pyxtream", "qualname": "Channel.url", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Channel.stream_type": {"fullname": "pyxtream.pyxtream.Channel.stream_type", "modulename": "pyxtream.pyxtream", "qualname": "Channel.stream_type", "kind": "variable", "doc": "
\n", "annotation": ": str", "default_value": "''"}, "pyxtream.pyxtream.Channel.group_id": {"fullname": "pyxtream.pyxtream.Channel.group_id", "modulename": "pyxtream.pyxtream", "qualname": "Channel.group_id", "kind": "variable", "doc": "
\n", "annotation": ": str", "default_value": "''"}, "pyxtream.pyxtream.Channel.is_adult": {"fullname": "pyxtream.pyxtream.Channel.is_adult", "modulename": "pyxtream.pyxtream", "qualname": "Channel.is_adult", "kind": "variable", "doc": "
\n", "annotation": ": int", "default_value": "0"}, "pyxtream.pyxtream.Channel.added": {"fullname": "pyxtream.pyxtream.Channel.added", "modulename": "pyxtream.pyxtream", "qualname": "Channel.added", "kind": "variable", "doc": "
\n", "annotation": ": int", "default_value": "0"}, "pyxtream.pyxtream.Channel.epg_channel_id": {"fullname": "pyxtream.pyxtream.Channel.epg_channel_id", "modulename": "pyxtream.pyxtream", "qualname": "Channel.epg_channel_id", "kind": "variable", "doc": "
\n", "annotation": ": str", "default_value": "''"}, "pyxtream.pyxtream.Channel.age_days_from_added": {"fullname": "pyxtream.pyxtream.Channel.age_days_from_added", "modulename": "pyxtream.pyxtream", "qualname": "Channel.age_days_from_added", "kind": "variable", "doc": "
\n", "annotation": ": int", "default_value": "0"}, "pyxtream.pyxtream.Channel.date_now": {"fullname": "pyxtream.pyxtream.Channel.date_now", "modulename": "pyxtream.pyxtream", "qualname": "Channel.date_now", "kind": "variable", "doc": "
\n", "annotation": ": datetime.datetime"}, "pyxtream.pyxtream.Channel.raw": {"fullname": "pyxtream.pyxtream.Channel.raw", "modulename": "pyxtream.pyxtream", "qualname": "Channel.raw", "kind": "variable", "doc": "
\n", "annotation": ": dict", "default_value": "{}"}, "pyxtream.pyxtream.Channel.export_json": {"fullname": "pyxtream.pyxtream.Channel.export_json", "modulename": "pyxtream.pyxtream", "qualname": "Channel.export_json", "kind": "function", "doc": "
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.pyxtream.Group": {"fullname": "pyxtream.pyxtream.Group", "modulename": "pyxtream.pyxtream", "qualname": "Group", "kind": "class", "doc": "
\n"}, "pyxtream.pyxtream.Group.__init__": {"fullname": "pyxtream.pyxtream.Group.__init__", "modulename": "pyxtream.pyxtream", "qualname": "Group.__init__", "kind": "function", "doc": "
\n", "signature": "(group_info : dict , stream_type : str ) "}, "pyxtream.pyxtream.Group.name": {"fullname": "pyxtream.pyxtream.Group.name", "modulename": "pyxtream.pyxtream", "qualname": "Group.name", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Group.group_type": {"fullname": "pyxtream.pyxtream.Group.group_type", "modulename": "pyxtream.pyxtream", "qualname": "Group.group_type", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Group.group_id": {"fullname": "pyxtream.pyxtream.Group.group_id", "modulename": "pyxtream.pyxtream", "qualname": "Group.group_id", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Group.raw": {"fullname": "pyxtream.pyxtream.Group.raw", "modulename": "pyxtream.pyxtream", "qualname": "Group.raw", "kind": "variable", "doc": "
\n", "annotation": ": dict", "default_value": "{}"}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"fullname": "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname", "modulename": "pyxtream.pyxtream", "qualname": "Group.convert_region_shortname_to_fullname", "kind": "function", "doc": "
\n", "signature": "(self , shortname ): ", "funcdef": "def"}, "pyxtream.pyxtream.Group.channels": {"fullname": "pyxtream.pyxtream.Group.channels", "modulename": "pyxtream.pyxtream", "qualname": "Group.channels", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Group.series": {"fullname": "pyxtream.pyxtream.Group.series", "modulename": "pyxtream.pyxtream", "qualname": "Group.series", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Group.region_shortname": {"fullname": "pyxtream.pyxtream.Group.region_shortname", "modulename": "pyxtream.pyxtream", "qualname": "Group.region_shortname", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Group.region_longname": {"fullname": "pyxtream.pyxtream.Group.region_longname", "modulename": "pyxtream.pyxtream", "qualname": "Group.region_longname", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode": {"fullname": "pyxtream.pyxtream.Episode", "modulename": "pyxtream.pyxtream", "qualname": "Episode", "kind": "class", "doc": "
\n"}, "pyxtream.pyxtream.Episode.__init__": {"fullname": "pyxtream.pyxtream.Episode.__init__", "modulename": "pyxtream.pyxtream", "qualname": "Episode.__init__", "kind": "function", "doc": "
\n", "signature": "(xtream : object , series_info , group_title , episode_info ) "}, "pyxtream.pyxtream.Episode.title": {"fullname": "pyxtream.pyxtream.Episode.title", "modulename": "pyxtream.pyxtream", "qualname": "Episode.title", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Episode.name": {"fullname": "pyxtream.pyxtream.Episode.name", "modulename": "pyxtream.pyxtream", "qualname": "Episode.name", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Episode.info": {"fullname": "pyxtream.pyxtream.Episode.info", "modulename": "pyxtream.pyxtream", "qualname": "Episode.info", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Episode.raw": {"fullname": "pyxtream.pyxtream.Episode.raw", "modulename": "pyxtream.pyxtream", "qualname": "Episode.raw", "kind": "variable", "doc": "
\n", "annotation": ": dict", "default_value": "{}"}, "pyxtream.pyxtream.Episode.group_title": {"fullname": "pyxtream.pyxtream.Episode.group_title", "modulename": "pyxtream.pyxtream", "qualname": "Episode.group_title", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.id": {"fullname": "pyxtream.pyxtream.Episode.id", "modulename": "pyxtream.pyxtream", "qualname": "Episode.id", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.container_extension": {"fullname": "pyxtream.pyxtream.Episode.container_extension", "modulename": "pyxtream.pyxtream", "qualname": "Episode.container_extension", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.episode_number": {"fullname": "pyxtream.pyxtream.Episode.episode_number", "modulename": "pyxtream.pyxtream", "qualname": "Episode.episode_number", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.av_info": {"fullname": "pyxtream.pyxtream.Episode.av_info", "modulename": "pyxtream.pyxtream", "qualname": "Episode.av_info", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.logo": {"fullname": "pyxtream.pyxtream.Episode.logo", "modulename": "pyxtream.pyxtream", "qualname": "Episode.logo", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.logo_path": {"fullname": "pyxtream.pyxtream.Episode.logo_path", "modulename": "pyxtream.pyxtream", "qualname": "Episode.logo_path", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.url": {"fullname": "pyxtream.pyxtream.Episode.url", "modulename": "pyxtream.pyxtream", "qualname": "Episode.url", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie": {"fullname": "pyxtream.pyxtream.Serie", "modulename": "pyxtream.pyxtream", "qualname": "Serie", "kind": "class", "doc": "
\n"}, "pyxtream.pyxtream.Serie.__init__": {"fullname": "pyxtream.pyxtream.Serie.__init__", "modulename": "pyxtream.pyxtream", "qualname": "Serie.__init__", "kind": "function", "doc": "
\n", "signature": "(xtream : object , series_info ) "}, "pyxtream.pyxtream.Serie.name": {"fullname": "pyxtream.pyxtream.Serie.name", "modulename": "pyxtream.pyxtream", "qualname": "Serie.name", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Serie.logo": {"fullname": "pyxtream.pyxtream.Serie.logo", "modulename": "pyxtream.pyxtream", "qualname": "Serie.logo", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Serie.logo_path": {"fullname": "pyxtream.pyxtream.Serie.logo_path", "modulename": "pyxtream.pyxtream", "qualname": "Serie.logo_path", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Serie.series_id": {"fullname": "pyxtream.pyxtream.Serie.series_id", "modulename": "pyxtream.pyxtream", "qualname": "Serie.series_id", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Serie.plot": {"fullname": "pyxtream.pyxtream.Serie.plot", "modulename": "pyxtream.pyxtream", "qualname": "Serie.plot", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Serie.youtube_trailer": {"fullname": "pyxtream.pyxtream.Serie.youtube_trailer", "modulename": "pyxtream.pyxtream", "qualname": "Serie.youtube_trailer", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Serie.genre": {"fullname": "pyxtream.pyxtream.Serie.genre", "modulename": "pyxtream.pyxtream", "qualname": "Serie.genre", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Serie.raw": {"fullname": "pyxtream.pyxtream.Serie.raw", "modulename": "pyxtream.pyxtream", "qualname": "Serie.raw", "kind": "variable", "doc": "
\n", "annotation": ": dict", "default_value": "{}"}, "pyxtream.pyxtream.Serie.xtream": {"fullname": "pyxtream.pyxtream.Serie.xtream", "modulename": "pyxtream.pyxtream", "qualname": "Serie.xtream", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie.seasons": {"fullname": "pyxtream.pyxtream.Serie.seasons", "modulename": "pyxtream.pyxtream", "qualname": "Serie.seasons", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie.episodes": {"fullname": "pyxtream.pyxtream.Serie.episodes", "modulename": "pyxtream.pyxtream", "qualname": "Serie.episodes", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie.url": {"fullname": "pyxtream.pyxtream.Serie.url", "modulename": "pyxtream.pyxtream", "qualname": "Serie.url", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie.export_json": {"fullname": "pyxtream.pyxtream.Serie.export_json", "modulename": "pyxtream.pyxtream", "qualname": "Serie.export_json", "kind": "function", "doc": "
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.pyxtream.Season": {"fullname": "pyxtream.pyxtream.Season", "modulename": "pyxtream.pyxtream", "qualname": "Season", "kind": "class", "doc": "
\n"}, "pyxtream.pyxtream.Season.__init__": {"fullname": "pyxtream.pyxtream.Season.__init__", "modulename": "pyxtream.pyxtream", "qualname": "Season.__init__", "kind": "function", "doc": "
\n", "signature": "(name ) "}, "pyxtream.pyxtream.Season.name": {"fullname": "pyxtream.pyxtream.Season.name", "modulename": "pyxtream.pyxtream", "qualname": "Season.name", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.Season.episodes": {"fullname": "pyxtream.pyxtream.Season.episodes", "modulename": "pyxtream.pyxtream", "qualname": "Season.episodes", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream": {"fullname": "pyxtream.pyxtream.XTream", "modulename": "pyxtream.pyxtream", "qualname": "XTream", "kind": "class", "doc": "
\n"}, "pyxtream.pyxtream.XTream.__init__": {"fullname": "pyxtream.pyxtream.XTream.__init__", "modulename": "pyxtream.pyxtream", "qualname": "XTream.__init__", "kind": "function", "doc": "Initialize Xtream Class
\n\nArgs:\n provider_name (str): Name of the IPTV provider\n provider_username (str): User name of the IPTV provider\n provider_password (str): Password of the IPTV provider\n provider_url (str): URL of the IPTV provider\n headers (dict): Requests Headers\n hide_adult_content(bool, optional): When True hide stream that are marked for adult\n cache_path (str, optional): Location where to save loaded files.\n Defaults to empty string.\n reload_time_sec (int, optional): Number of seconds before automatic reloading\n (-1 to turn it OFF)\n validate_json (bool, optional): Check Xtream API provided JSON for validity\n enable_flask (bool, optional): Enable Flask\n debug_flask (bool, optional): Enable the debug mode in Flask\n flask_port (int, optional): Flask Port Number
\n\nReturns: XTream Class Instance
\n\n\nNote 1: If it fails to authorize with provided username and password,\nauth_data will be an empty dictionary. \nNote 2: The JSON validation option will take considerable amount of time and it should be\nused only as a debug tool. The Xtream API JSON from the provider passes through a\nschema that represent the best available understanding of how the Xtream API\nworks. \n \n", "signature": "(\tprovider_name : str , \tprovider_username : str , \tprovider_password : str , \tprovider_url : str , \theaders : dict = None , \thide_adult_content : bool = False , \tcache_path : str = '' , \treload_time_sec : int = 28800 , \tvalidate_json : bool = False , \tenable_flask : bool = False , \tdebug_flask : bool = True , \tflask_port : int = 5000 ) "}, "pyxtream.pyxtream.XTream.name": {"fullname": "pyxtream.pyxtream.XTream.name", "modulename": "pyxtream.pyxtream", "qualname": "XTream.name", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.XTream.server": {"fullname": "pyxtream.pyxtream.XTream.server", "modulename": "pyxtream.pyxtream", "qualname": "XTream.server", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.XTream.secure_server": {"fullname": "pyxtream.pyxtream.XTream.secure_server", "modulename": "pyxtream.pyxtream", "qualname": "XTream.secure_server", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.XTream.username": {"fullname": "pyxtream.pyxtream.XTream.username", "modulename": "pyxtream.pyxtream", "qualname": "XTream.username", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.XTream.password": {"fullname": "pyxtream.pyxtream.XTream.password", "modulename": "pyxtream.pyxtream", "qualname": "XTream.password", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.XTream.base_url": {"fullname": "pyxtream.pyxtream.XTream.base_url", "modulename": "pyxtream.pyxtream", "qualname": "XTream.base_url", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.XTream.base_url_ssl": {"fullname": "pyxtream.pyxtream.XTream.base_url_ssl", "modulename": "pyxtream.pyxtream", "qualname": "XTream.base_url_ssl", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.XTream.cache_path": {"fullname": "pyxtream.pyxtream.XTream.cache_path", "modulename": "pyxtream.pyxtream", "qualname": "XTream.cache_path", "kind": "variable", "doc": "
\n", "default_value": "''"}, "pyxtream.pyxtream.XTream.account_expiration": {"fullname": "pyxtream.pyxtream.XTream.account_expiration", "modulename": "pyxtream.pyxtream", "qualname": "XTream.account_expiration", "kind": "variable", "doc": "
\n", "annotation": ": datetime.timedelta"}, "pyxtream.pyxtream.XTream.live_type": {"fullname": "pyxtream.pyxtream.XTream.live_type", "modulename": "pyxtream.pyxtream", "qualname": "XTream.live_type", "kind": "variable", "doc": "
\n", "default_value": "'Live'"}, "pyxtream.pyxtream.XTream.vod_type": {"fullname": "pyxtream.pyxtream.XTream.vod_type", "modulename": "pyxtream.pyxtream", "qualname": "XTream.vod_type", "kind": "variable", "doc": "
\n", "default_value": "'VOD'"}, "pyxtream.pyxtream.XTream.series_type": {"fullname": "pyxtream.pyxtream.XTream.series_type", "modulename": "pyxtream.pyxtream", "qualname": "XTream.series_type", "kind": "variable", "doc": "
\n", "default_value": "'Series'"}, "pyxtream.pyxtream.XTream.hide_adult_content": {"fullname": "pyxtream.pyxtream.XTream.hide_adult_content", "modulename": "pyxtream.pyxtream", "qualname": "XTream.hide_adult_content", "kind": "variable", "doc": "
\n", "default_value": "False"}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"fullname": "pyxtream.pyxtream.XTream.live_catch_all_group", "modulename": "pyxtream.pyxtream", "qualname": "XTream.live_catch_all_group", "kind": "variable", "doc": "
\n", "default_value": "<pyxtream.pyxtream.Group object>"}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"fullname": "pyxtream.pyxtream.XTream.vod_catch_all_group", "modulename": "pyxtream.pyxtream", "qualname": "XTream.vod_catch_all_group", "kind": "variable", "doc": "
\n", "default_value": "<pyxtream.pyxtream.Group object>"}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"fullname": "pyxtream.pyxtream.XTream.series_catch_all_group", "modulename": "pyxtream.pyxtream", "qualname": "XTream.series_catch_all_group", "kind": "variable", "doc": "
\n", "default_value": "<pyxtream.pyxtream.Group object>"}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"fullname": "pyxtream.pyxtream.XTream.threshold_time_sec", "modulename": "pyxtream.pyxtream", "qualname": "XTream.threshold_time_sec", "kind": "variable", "doc": "
\n", "default_value": "-1"}, "pyxtream.pyxtream.XTream.validate_json": {"fullname": "pyxtream.pyxtream.XTream.validate_json", "modulename": "pyxtream.pyxtream", "qualname": "XTream.validate_json", "kind": "variable", "doc": "
\n", "annotation": ": bool", "default_value": "True"}, "pyxtream.pyxtream.XTream.auth_data": {"fullname": "pyxtream.pyxtream.XTream.auth_data", "modulename": "pyxtream.pyxtream", "qualname": "XTream.auth_data", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.authorization": {"fullname": "pyxtream.pyxtream.XTream.authorization", "modulename": "pyxtream.pyxtream", "qualname": "XTream.authorization", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.groups": {"fullname": "pyxtream.pyxtream.XTream.groups", "modulename": "pyxtream.pyxtream", "qualname": "XTream.groups", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.channels": {"fullname": "pyxtream.pyxtream.XTream.channels", "modulename": "pyxtream.pyxtream", "qualname": "XTream.channels", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.series": {"fullname": "pyxtream.pyxtream.XTream.series", "modulename": "pyxtream.pyxtream", "qualname": "XTream.series", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.movies": {"fullname": "pyxtream.pyxtream.XTream.movies", "modulename": "pyxtream.pyxtream", "qualname": "XTream.movies", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.movies_30days": {"fullname": "pyxtream.pyxtream.XTream.movies_30days", "modulename": "pyxtream.pyxtream", "qualname": "XTream.movies_30days", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.movies_7days": {"fullname": "pyxtream.pyxtream.XTream.movies_7days", "modulename": "pyxtream.pyxtream", "qualname": "XTream.movies_7days", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.connection_headers": {"fullname": "pyxtream.pyxtream.XTream.connection_headers", "modulename": "pyxtream.pyxtream", "qualname": "XTream.connection_headers", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.state": {"fullname": "pyxtream.pyxtream.XTream.state", "modulename": "pyxtream.pyxtream", "qualname": "XTream.state", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.download_progress": {"fullname": "pyxtream.pyxtream.XTream.download_progress", "modulename": "pyxtream.pyxtream", "qualname": "XTream.download_progress", "kind": "variable", "doc": "
\n", "annotation": ": dict"}, "pyxtream.pyxtream.XTream.app_fullpath": {"fullname": "pyxtream.pyxtream.XTream.app_fullpath", "modulename": "pyxtream.pyxtream", "qualname": "XTream.app_fullpath", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.html_template_folder": {"fullname": "pyxtream.pyxtream.XTream.html_template_folder", "modulename": "pyxtream.pyxtream", "qualname": "XTream.html_template_folder", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.printx": {"fullname": "pyxtream.pyxtream.XTream.printx", "modulename": "pyxtream.pyxtream", "qualname": "XTream.printx", "kind": "function", "doc": "
\n", "signature": "(self , msg : str , end = ' \\n ' , flush = True ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.get_download_progress": {"fullname": "pyxtream.pyxtream.XTream.get_download_progress", "modulename": "pyxtream.pyxtream", "qualname": "XTream.get_download_progress", "kind": "function", "doc": "
\n", "signature": "(self , stream_id : int = None ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.get_last_7days": {"fullname": "pyxtream.pyxtream.XTream.get_last_7days", "modulename": "pyxtream.pyxtream", "qualname": "XTream.get_last_7days", "kind": "function", "doc": "
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.get_last_30days": {"fullname": "pyxtream.pyxtream.XTream.get_last_30days", "modulename": "pyxtream.pyxtream", "qualname": "XTream.get_last_30days", "kind": "function", "doc": "
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.search_stream": {"fullname": "pyxtream.pyxtream.XTream.search_stream", "modulename": "pyxtream.pyxtream", "qualname": "XTream.search_stream", "kind": "function", "doc": "Search for streams
\n\nArgs:\n keyword (str): Keyword to search for. Supports REGEX\n ignore_case (bool, optional): True to ignore case during search. Defaults to \"True\".\n return_type (str, optional): Output format, 'LIST' or 'JSON'. Defaults to \"LIST\".\n stream_type (list, optional): Search within specific stream type.\n added_after (datetime, optional): Search for items that have been added after a certain date.
\n\nReturns:\n list: List with all the results, it could be empty.
\n", "signature": "(\tself , \tkeyword : str , \tignore_case : bool = True , \treturn_type : str = 'LIST' , \tstream_type : list = ( 'series' , 'movies' , 'channels' ) , \tadded_after : datetime . datetime = None ) -> list : ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.download_video": {"fullname": "pyxtream.pyxtream.XTream.download_video", "modulename": "pyxtream.pyxtream", "qualname": "XTream.download_video", "kind": "function", "doc": "Download Video from Stream ID
\n\nArgs:\n stream_id (int): String identifying the stream ID
\n\nReturns:\n str: Absolute Path Filename where the file was saved. Empty string if could not download
\n", "signature": "(self , stream_type : str , stream_id : int ) -> str : ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.authenticate": {"fullname": "pyxtream.pyxtream.XTream.authenticate", "modulename": "pyxtream.pyxtream", "qualname": "XTream.authenticate", "kind": "function", "doc": "Login to provider
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.load_iptv": {"fullname": "pyxtream.pyxtream.XTream.load_iptv", "modulename": "pyxtream.pyxtream", "qualname": "XTream.load_iptv", "kind": "function", "doc": "Load XTream IPTV
\n\n\nAdd all Live TV to XTream.channels \nAdd all VOD to XTream.movies \nAdd all Series to XTream.series\nSeries contains Seasons and Episodes. Those are not automatically\nretrieved from the server to reduce the loading time. \nAdd all groups to XTream.groups\nGroups are for all three channel types, Live TV, VOD, and Series \n \n\nReturns:\n bool: True if successful, False if error
\n", "signature": "(self ) -> bool : ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"fullname": "pyxtream.pyxtream.XTream.get_series_info_by_id", "modulename": "pyxtream.pyxtream", "qualname": "XTream.get_series_info_by_id", "kind": "function", "doc": "Get Seasons and Episodes for a Series
\n\nArgs:\n get_series (dict): Series dictionary
\n", "signature": "(self , get_series : dict ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.vodInfoByID": {"fullname": "pyxtream.pyxtream.XTream.vodInfoByID", "modulename": "pyxtream.pyxtream", "qualname": "XTream.vodInfoByID", "kind": "function", "doc": "
\n", "signature": "(self , vod_id ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"fullname": "pyxtream.pyxtream.XTream.liveEpgByStream", "modulename": "pyxtream.pyxtream", "qualname": "XTream.liveEpgByStream", "kind": "function", "doc": "
\n", "signature": "(self , stream_id ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"fullname": "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit", "modulename": "pyxtream.pyxtream", "qualname": "XTream.liveEpgByStreamAndLimit", "kind": "function", "doc": "
\n", "signature": "(self , stream_id , limit ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"fullname": "pyxtream.pyxtream.XTream.allLiveEpgByStream", "modulename": "pyxtream.pyxtream", "qualname": "XTream.allLiveEpgByStream", "kind": "function", "doc": "
\n", "signature": "(self , stream_id ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.allEpg": {"fullname": "pyxtream.pyxtream.XTream.allEpg", "modulename": "pyxtream.pyxtream", "qualname": "XTream.allEpg", "kind": "function", "doc": "
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.rest_api": {"fullname": "pyxtream.rest_api", "modulename": "pyxtream.rest_api", "kind": "module", "doc": "Rest API
\n"}, "pyxtream.rest_api.EndpointAction": {"fullname": "pyxtream.rest_api.EndpointAction", "modulename": "pyxtream.rest_api", "qualname": "EndpointAction", "kind": "class", "doc": "
\n"}, "pyxtream.rest_api.EndpointAction.__init__": {"fullname": "pyxtream.rest_api.EndpointAction.__init__", "modulename": "pyxtream.rest_api", "qualname": "EndpointAction.__init__", "kind": "function", "doc": "
\n", "signature": "(action , function_name ) "}, "pyxtream.rest_api.EndpointAction.response": {"fullname": "pyxtream.rest_api.EndpointAction.response", "modulename": "pyxtream.rest_api", "qualname": "EndpointAction.response", "kind": "variable", "doc": "
\n", "annotation": ": flask.wrappers.Response"}, "pyxtream.rest_api.EndpointAction.function_name": {"fullname": "pyxtream.rest_api.EndpointAction.function_name", "modulename": "pyxtream.rest_api", "qualname": "EndpointAction.function_name", "kind": "variable", "doc": "
\n"}, "pyxtream.rest_api.EndpointAction.action": {"fullname": "pyxtream.rest_api.EndpointAction.action", "modulename": "pyxtream.rest_api", "qualname": "EndpointAction.action", "kind": "variable", "doc": "
\n"}, "pyxtream.rest_api.FlaskWrap": {"fullname": "pyxtream.rest_api.FlaskWrap", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap", "kind": "class", "doc": "A class that represents a thread of control.
\n\nThis class can be safely subclassed in a limited fashion. There are two ways\nto specify the activity: by passing a callable object to the constructor, or\nby overriding the run() method in a subclass.
\n", "bases": "threading.Thread"}, "pyxtream.rest_api.FlaskWrap.__init__": {"fullname": "pyxtream.rest_api.FlaskWrap.__init__", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.__init__", "kind": "function", "doc": "This constructor should always be called with keyword arguments. Arguments are:
\n\ngroup should be None; reserved for future extension when a ThreadGroup\nclass is implemented.
\n\ntarget is the callable object to be invoked by the run()\nmethod. Defaults to None, meaning nothing is called.
\n\nname is the thread name. By default, a unique name is constructed of\nthe form \"Thread-N\" where N is a small decimal number.
\n\nargs is a list or tuple of arguments for the target invocation. Defaults to ().
\n\nkwargs is a dictionary of keyword arguments for the target\ninvocation. Defaults to {}.
\n\nIf a subclass overrides the constructor, it must make sure to invoke\nthe base class constructor (Thread.__init__()) before doing anything\nelse to the thread.
\n", "signature": "(\tname , \txtream : object , \thtml_template_folder : str = '' , \thost : str = '0.0.0.0' , \tport : int = 5000 , \tdebug : bool = True ) "}, "pyxtream.rest_api.FlaskWrap.home_template": {"fullname": "pyxtream.rest_api.FlaskWrap.home_template", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.home_template", "kind": "variable", "doc": "
\n", "default_value": "'\\n<!DOCTYPE html><html lang="en"><head></head><body>pyxtream API</body></html>\\n '"}, "pyxtream.rest_api.FlaskWrap.host": {"fullname": "pyxtream.rest_api.FlaskWrap.host", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.host", "kind": "variable", "doc": "
\n", "annotation": ": str", "default_value": "''"}, "pyxtream.rest_api.FlaskWrap.port": {"fullname": "pyxtream.rest_api.FlaskWrap.port", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.port", "kind": "variable", "doc": "
\n", "annotation": ": int", "default_value": "0"}, "pyxtream.rest_api.FlaskWrap.debug": {"fullname": "pyxtream.rest_api.FlaskWrap.debug", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.debug", "kind": "variable", "doc": "
\n"}, "pyxtream.rest_api.FlaskWrap.app": {"fullname": "pyxtream.rest_api.FlaskWrap.app", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.app", "kind": "variable", "doc": "
\n"}, "pyxtream.rest_api.FlaskWrap.xt": {"fullname": "pyxtream.rest_api.FlaskWrap.xt", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.xt", "kind": "variable", "doc": "
\n"}, "pyxtream.rest_api.FlaskWrap.name": {"fullname": "pyxtream.rest_api.FlaskWrap.name", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.name", "kind": "variable", "doc": "A string used for identification purposes only.
\n\nIt has no semantics. Multiple threads may be given the same name. The\ninitial name is set by the constructor.
\n"}, "pyxtream.rest_api.FlaskWrap.daemon": {"fullname": "pyxtream.rest_api.FlaskWrap.daemon", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.daemon", "kind": "variable", "doc": "A boolean value indicating whether this thread is a daemon thread.
\n\nThis must be set before start() is called, otherwise RuntimeError is\nraised. Its initial value is inherited from the creating thread; the\nmain thread is not a daemon thread and therefore all threads created in\nthe main thread default to daemon = False.
\n\nThe entire Python program exits when only daemon threads are left.
\n"}, "pyxtream.rest_api.FlaskWrap.run": {"fullname": "pyxtream.rest_api.FlaskWrap.run", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.run", "kind": "function", "doc": "Method representing the thread's activity.
\n\nYou may override this method in a subclass. The standard run() method\ninvokes the callable object passed to the object's constructor as the\ntarget argument, if any, with sequential and keyword arguments taken\nfrom the args and kwargs arguments, respectively.
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"fullname": "pyxtream.rest_api.FlaskWrap.add_endpoint", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.add_endpoint", "kind": "function", "doc": "
\n", "signature": "(self , endpoint = None , endpoint_name = None , handler = None ): ", "funcdef": "def"}, "pyxtream.schemaValidator": {"fullname": "pyxtream.schemaValidator", "modulename": "pyxtream.schemaValidator", "kind": "module", "doc": "
\n"}, "pyxtream.schemaValidator.SchemaType": {"fullname": "pyxtream.schemaValidator.SchemaType", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType", "kind": "class", "doc": "
\n", "bases": "enum.Enum"}, "pyxtream.schemaValidator.SchemaType.SERIES": {"fullname": "pyxtream.schemaValidator.SchemaType.SERIES", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType.SERIES", "kind": "variable", "doc": "
\n", "default_value": "<SchemaType.SERIES: 1>"}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"fullname": "pyxtream.schemaValidator.SchemaType.SERIES_INFO", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType.SERIES_INFO", "kind": "variable", "doc": "
\n", "default_value": "<SchemaType.SERIES_INFO: 2>"}, "pyxtream.schemaValidator.SchemaType.LIVE": {"fullname": "pyxtream.schemaValidator.SchemaType.LIVE", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType.LIVE", "kind": "variable", "doc": "
\n", "default_value": "<SchemaType.LIVE: 3>"}, "pyxtream.schemaValidator.SchemaType.VOD": {"fullname": "pyxtream.schemaValidator.SchemaType.VOD", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType.VOD", "kind": "variable", "doc": "
\n", "default_value": "<SchemaType.VOD: 4>"}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"fullname": "pyxtream.schemaValidator.SchemaType.CHANNEL", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType.CHANNEL", "kind": "variable", "doc": "
\n", "default_value": "<SchemaType.CHANNEL: 5>"}, "pyxtream.schemaValidator.SchemaType.GROUP": {"fullname": "pyxtream.schemaValidator.SchemaType.GROUP", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType.GROUP", "kind": "variable", "doc": "
\n", "default_value": "<SchemaType.GROUP: 6>"}, "pyxtream.schemaValidator.series_schema": {"fullname": "pyxtream.schemaValidator.series_schema", "modulename": "pyxtream.schemaValidator", "qualname": "series_schema", "kind": "variable", "doc": "
\n", "default_value": "{'$schema': 'https://json-schema.org/draft/2020-12/schema', '$id': 'https://example.com/product.schema.json', 'title': 'Series', 'description': 'xtream API Series Schema', 'type': 'object', 'properties': {'seasons': {'type': 'array', 'items': {'properties': {'air_date': {'type': 'string', 'format': 'date'}, 'episode_count': {'type': 'integer'}, 'id': {'type': 'integer'}, 'name': {'type': 'string'}, 'overview': {'type': 'string'}, 'season_number': {'type': 'integer'}, 'cover': {'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}, 'cover_big': {'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}}, 'required': ['id'], 'title': 'Season'}}, 'info': {'properties': {'name': {'type': 'string'}, 'cover': {'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}, 'plot': {'type': 'string'}, 'cast': {'type': 'string'}, 'director': {'type': 'string'}, 'genre': {'type': 'string'}, 'releaseDate': {'type': 'string', 'format': 'date'}, 'last_modified': {'type': 'string', 'format': 'integer'}, 'rating': {'type': 'string', 'format': 'integer'}, 'rating_5based': {'type': 'number'}, 'backdrop_path': {'type': 'array', 'items': {'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}}, 'youtube_trailed': {'type': 'string'}, 'episode_run_time': {'type': 'string', 'format': 'integer'}, 'category_id': {'type': 'string', 'format': 'integer'}}, 'required': ['name'], 'title': 'Info'}, 'episodes': {'patternProperties': {'^\\\\d+$': {'type': 'array', 'items': {'properties': {'id': {'type': 'string', 'format': 'integer'}, 'episode_num': {'type': 'integer'}, 'title': {'type': 'string'}, 'container_extension': {'type': 'string'}, 'info': {'type': 'object', 'items': {'plot': {'type': 'string'}}}, 'customer_sid': {'type': 'string'}, 'added': {'type': 'string', 'format': 'integer'}, 'season': {'type': 'integer'}, 'direct_source': {'type': 'string'}}}}}}}, 'required': ['info', 'seasons', 'episodes']}"}, "pyxtream.schemaValidator.series_info_schema": {"fullname": "pyxtream.schemaValidator.series_info_schema", "modulename": "pyxtream.schemaValidator", "qualname": "series_info_schema", "kind": "variable", "doc": "
\n", "default_value": "{'$schema': 'https://json-schema.org/draft/2020-12/schema', '$id': 'https://example.com/product.schema.json', 'title': 'Series', 'description': 'xtream API Series Info Schema', 'type': 'object', 'properties': {'name': {'type': 'string'}, 'cover': {'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}, 'plot': {'type': 'string'}, 'cast': {'type': 'string'}, 'director': {'type': 'string'}, 'genre': {'type': 'string'}, 'releaseDate': {'type': 'string', 'format': 'date'}, 'last_modified': {'type': 'string', 'format': 'integer'}, 'rating': {'type': 'string', 'format': 'integer'}, 'rating_5based': {'type': 'number'}, 'backdrop_path': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}}, {'type': 'string'}]}, 'youtube_trailed': {'type': 'string'}, 'episode_run_time': {'type': 'string', 'format': 'integer'}, 'category_id': {'type': 'string', 'format': 'integer'}}, 'required': ['name', 'category_id']}"}, "pyxtream.schemaValidator.live_schema": {"fullname": "pyxtream.schemaValidator.live_schema", "modulename": "pyxtream.schemaValidator", "qualname": "live_schema", "kind": "variable", "doc": "
\n", "default_value": "{'$schema': 'https://json-schema.org/draft/2020-12/schema', '$id': 'https://example.com/product.schema.json', 'title': 'Live', 'description': 'xtream API Live Schema', 'type': 'object', 'properties': {'num': {'type': 'integer'}, 'name': {'type': 'string'}, 'stream_type': {'type': 'string'}, 'stream_id': {'type': 'integer'}, 'stream_icon': {'anyOf': [{'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}, {'type': 'null'}]}, 'epg_channel_id': {'anyOf': [{'type': 'null'}, {'type': 'string'}]}, 'added': {'type': 'string', 'format': 'integer'}, 'is_adult': {'type': 'string', 'format': 'number'}, 'category_id': {'type': 'string'}, 'custom_sid': {'type': 'string'}, 'tv_archive': {'type': 'number'}, 'direct_source': {'type': 'string'}, 'tv_archive_duration': {'anyOf': [{'type': 'number'}, {'type': 'string', 'format': 'integer'}]}}}"}, "pyxtream.schemaValidator.vod_schema": {"fullname": "pyxtream.schemaValidator.vod_schema", "modulename": "pyxtream.schemaValidator", "qualname": "vod_schema", "kind": "variable", "doc": "
\n", "default_value": "{'$schema': 'https://json-schema.org/draft/2020-12/schema', '$id': 'https://example.com/product.schema.json', 'title': 'VOD', 'description': 'xtream API VOD Schema', 'type': 'object', 'properties': {'num': {'type': 'integer'}, 'name': {'type': 'string'}, 'stream_type': {'type': 'string'}, 'stream_id': {'type': 'integer'}, 'stream_icon': {'anyOf': [{'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}, {'type': 'null'}]}, 'rating': {'anyOf': [{'type': 'null'}, {'type': 'string', 'format': 'integer'}, {'type': 'number'}]}, 'rating_5based': {'type': 'number'}, 'added': {'type': 'string', 'format': 'integer'}, 'is_adult': {'type': 'string', 'format': 'number'}, 'category_id': {'type': 'string'}, 'container_extension': {'type': 'string'}, 'custom_sid': {'type': 'string'}, 'direct_source': {'type': 'string'}}}"}, "pyxtream.schemaValidator.channel_schema": {"fullname": "pyxtream.schemaValidator.channel_schema", "modulename": "pyxtream.schemaValidator", "qualname": "channel_schema", "kind": "variable", "doc": "
\n", "default_value": "{}"}, "pyxtream.schemaValidator.group_schema": {"fullname": "pyxtream.schemaValidator.group_schema", "modulename": "pyxtream.schemaValidator", "qualname": "group_schema", "kind": "variable", "doc": "
\n", "default_value": "{'$schema': 'https://json-schema.org/draft/2020-12/schema', '$id': 'https://example.com/product.schema.json', 'title': 'Group', 'description': 'xtream API Group Schema', 'type': 'object', 'properties': {'category_id': {'type': 'string'}, 'category_name': {'type': 'string'}, 'parent_id': {'type': 'integer'}}}"}, "pyxtream.schemaValidator.schemaValidator": {"fullname": "pyxtream.schemaValidator.schemaValidator", "modulename": "pyxtream.schemaValidator", "qualname": "schemaValidator", "kind": "function", "doc": "
\n", "signature": "(jsonData : Any , schemaType : pyxtream . schemaValidator . SchemaType ) -> bool : ", "funcdef": "def"}, "pyxtream.version": {"fullname": "pyxtream.version", "modulename": "pyxtream.version", "kind": "module", "doc": "
\n"}}, "docInfo": {"pyxtream": {"qualname": 0, "fullname": 1, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.api": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 5}, "pyxtream.api.get_live_categories_URL": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "pyxtream.api.get_live_streams_URL": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "pyxtream.api.get_live_streams_URL_by_category": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_vod_cat_URL": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "pyxtream.api.get_vod_streams_URL": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "pyxtream.api.get_vod_streams_URL_by_category": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_series_cat_URL": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "pyxtream.api.get_series_URL": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "pyxtream.api.get_series_URL_by_category": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_series_info_URL_by_ID": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_VOD_info_URL_by_ID": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_live_epg_URL_by_stream": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"qualname": 8, "fullname": 10, "annotation": 0, "default_value": 0, "signature": 30, "bases": 0, "doc": 3}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"qualname": 7, "fullname": 9, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_all_epg_URL": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 3}, "pyxtream.pyxtream": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 66}, "pyxtream.pyxtream.SSL_FIRST": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 26, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.info": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.id": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.name": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.logo": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.logo_path": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.group_title": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.title": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.url": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.stream_type": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.group_id": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.is_adult": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.added": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.epg_channel_id": {"qualname": 4, "fullname": 6, "annotation": 2, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.age_days_from_added": {"qualname": 5, "fullname": 7, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.date_now": {"qualname": 3, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.raw": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.export_json": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 26, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.name": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.group_type": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.group_id": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.raw": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.channels": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.series": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.region_shortname": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.region_longname": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 32, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.title": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.name": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.info": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.raw": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.group_title": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.id": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.container_extension": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.episode_number": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.av_info": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.logo": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.logo_path": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.url": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 20, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.name": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.logo": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.logo_path": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.series_id": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.plot": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.youtube_trailer": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.genre": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.raw": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.xtream": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.seasons": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.episodes": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.url": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.export_json": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Season": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Season.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 9, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Season.name": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Season.episodes": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 208, "bases": 0, "doc": 217}, "pyxtream.pyxtream.XTream.name": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.server": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.secure_server": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.username": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.password": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.base_url": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.base_url_ssl": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.cache_path": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.account_expiration": {"qualname": 3, "fullname": 5, "annotation": 3, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.live_type": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.vod_type": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.series_type": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.hide_adult_content": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 2, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.validate_json": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.auth_data": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.authorization": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.groups": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.channels": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.series": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.movies": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.movies_30days": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.movies_7days": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.connection_headers": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.state": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.download_progress": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.app_fullpath": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.html_template_folder": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.printx": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 49, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.get_download_progress": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.get_last_7days": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.get_last_30days": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.search_stream": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 141, "bases": 0, "doc": 85}, "pyxtream.pyxtream.XTream.download_video": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 37}, "pyxtream.pyxtream.XTream.authenticate": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 5}, "pyxtream.pyxtream.XTream.load_iptv": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 83}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 18}, "pyxtream.pyxtream.XTream.vodInfoByID": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.allEpg": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 3}, "pyxtream.rest_api": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 4}, "pyxtream.rest_api.EndpointAction": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.EndpointAction.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 15, "bases": 0, "doc": 3}, "pyxtream.rest_api.EndpointAction.response": {"qualname": 2, "fullname": 5, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.EndpointAction.function_name": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.EndpointAction.action": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 49}, "pyxtream.rest_api.FlaskWrap.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 105, "bases": 0, "doc": 151}, "pyxtream.rest_api.FlaskWrap.home_template": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 34, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap.host": {"qualname": 2, "fullname": 5, "annotation": 2, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap.port": {"qualname": 2, "fullname": 5, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap.debug": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap.app": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap.xt": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap.name": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 33}, "pyxtream.rest_api.FlaskWrap.daemon": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 73}, "pyxtream.rest_api.FlaskWrap.run": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 53}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 42, "bases": 0, "doc": 3}, "pyxtream.schemaValidator": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.SchemaType": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 3}, "pyxtream.schemaValidator.SchemaType.SERIES": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.SchemaType.LIVE": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.SchemaType.VOD": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.SchemaType.GROUP": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.series_schema": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 746, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.series_info_schema": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 354, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.live_schema": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 314, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.vod_schema": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 306, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.channel_schema": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.group_schema": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 92, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.schemaValidator": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 3}, "pyxtream.version": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}}, "length": 163, "save": true}, "index": {"qualname": {"root": {"3": {"0": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.movies_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}}, "df": 2}}}}}, "docs": {}, "df": 0}, "7": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.movies_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}}, "df": 2}}}}}, "docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 8, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 19}, "n": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Serie.genre": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.pyxtream.Channel.group_title": {"tf": 1}, "pyxtream.pyxtream.Channel.group_id": {"tf": 1}, "pyxtream.pyxtream.Group": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.name": {"tf": 1}, "pyxtream.pyxtream.Group.group_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.group_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.raw": {"tf": 1}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Group.channels": {"tf": 1}, "pyxtream.pyxtream.Group.series": {"tf": 1}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1}, "pyxtream.pyxtream.Group.region_longname": {"tf": 1}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 19, "s": {"docs": {"pyxtream.pyxtream.XTream.groups": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}}, "df": 10, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream.Channel.logo": {"tf": 1}, "pyxtream.pyxtream.Channel.logo_path": {"tf": 1}, "pyxtream.pyxtream.Episode.logo": {"tf": 1}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1}, "pyxtream.pyxtream.Serie.logo": {"tf": 1}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1}}, "df": 6}}, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.region_longname": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}}, "df": 3}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}}, "df": 3}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.cache_path": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.Channel": {"tf": 1}, "pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Channel.info": {"tf": 1}, "pyxtream.pyxtream.Channel.id": {"tf": 1}, "pyxtream.pyxtream.Channel.name": {"tf": 1}, "pyxtream.pyxtream.Channel.logo": {"tf": 1}, "pyxtream.pyxtream.Channel.logo_path": {"tf": 1}, "pyxtream.pyxtream.Channel.group_title": {"tf": 1}, "pyxtream.pyxtream.Channel.title": {"tf": 1}, "pyxtream.pyxtream.Channel.url": {"tf": 1}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.Channel.group_id": {"tf": 1}, "pyxtream.pyxtream.Channel.is_adult": {"tf": 1}, "pyxtream.pyxtream.Channel.added": {"tf": 1}, "pyxtream.pyxtream.Channel.epg_channel_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}, "pyxtream.pyxtream.Channel.date_now": {"tf": 1}, "pyxtream.pyxtream.Channel.raw": {"tf": 1}, "pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}}, "df": 21, "s": {"docs": {"pyxtream.pyxtream.Group.channels": {"tf": 1}, "pyxtream.pyxtream.XTream.channels": {"tf": 1}}, "df": 2}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.Episode.container_extension": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.connection_headers": {"tf": 1}}, "df": 1}}}}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.Channel.url": {"tf": 1}, "pyxtream.pyxtream.Episode.url": {"tf": 1}, "pyxtream.pyxtream.Serie.url": {"tf": 1}, "pyxtream.pyxtream.XTream.base_url": {"tf": 1}, "pyxtream.pyxtream.XTream.base_url_ssl": {"tf": 1}}, "df": 20}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.username": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 5, "s": {"docs": {"pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}}, "df": 4}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.state": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Serie": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.name": {"tf": 1}, "pyxtream.pyxtream.Serie.logo": {"tf": 1}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1}, "pyxtream.pyxtream.Serie.series_id": {"tf": 1}, "pyxtream.pyxtream.Serie.plot": {"tf": 1}, "pyxtream.pyxtream.Serie.youtube_trailer": {"tf": 1}, "pyxtream.pyxtream.Serie.genre": {"tf": 1}, "pyxtream.pyxtream.Serie.raw": {"tf": 1}, "pyxtream.pyxtream.Serie.xtream": {"tf": 1}, "pyxtream.pyxtream.Serie.seasons": {"tf": 1}, "pyxtream.pyxtream.Serie.episodes": {"tf": 1}, "pyxtream.pyxtream.Serie.url": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}}, "df": 15, "s": {"docs": {"pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.Group.series": {"tf": 1}, "pyxtream.pyxtream.Serie.series_id": {"tf": 1}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 14}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.server": {"tf": 1}, "pyxtream.pyxtream.XTream.secure_server": {"tf": 1}}, "df": 2}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Season": {"tf": 1}, "pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.Season.name": {"tf": 1}, "pyxtream.pyxtream.Season.episodes": {"tf": 1}}, "df": 4, "s": {"docs": {"pyxtream.pyxtream.Serie.seasons": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {"pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}}, "df": 1, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.secure_server": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.SSL_FIRST": {"tf": 1}, "pyxtream.pyxtream.XTream.base_url_ssl": {"tf": 1}}, "df": 2}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1}}, "df": 2}}}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 6, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.SchemaType": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}}, "df": 7}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.schemaValidator": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "b": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 9}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.base_url": {"tf": 1}, "pyxtream.pyxtream.XTream.base_url_ssl": {"tf": 1}}, "df": 2}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 8, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.validate_json": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.Channel.info": {"tf": 1}, "pyxtream.pyxtream.Episode.info": {"tf": 1}, "pyxtream.pyxtream.Episode.av_info": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 8}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 8}}}, "d": {"docs": {"pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.Channel.id": {"tf": 1}, "pyxtream.pyxtream.Channel.group_id": {"tf": 1}, "pyxtream.pyxtream.Channel.epg_channel_id": {"tf": 1}, "pyxtream.pyxtream.Group.group_id": {"tf": 1}, "pyxtream.pyxtream.Episode.id": {"tf": 1}, "pyxtream.pyxtream.Serie.series_id": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 9}, "s": {"docs": {"pyxtream.pyxtream.Channel.is_adult": {"tf": 1}}, "df": 1}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "v": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.Channel.epg_channel_id": {"tf": 1}}, "df": 5}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Episode": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.title": {"tf": 1}, "pyxtream.pyxtream.Episode.name": {"tf": 1}, "pyxtream.pyxtream.Episode.info": {"tf": 1}, "pyxtream.pyxtream.Episode.raw": {"tf": 1}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1}, "pyxtream.pyxtream.Episode.id": {"tf": 1}, "pyxtream.pyxtream.Episode.container_extension": {"tf": 1}, "pyxtream.pyxtream.Episode.episode_number": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.av_info": {"tf": 1}, "pyxtream.pyxtream.Episode.logo": {"tf": 1}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1}, "pyxtream.pyxtream.Episode.url": {"tf": 1}}, "df": 14, "s": {"docs": {"pyxtream.pyxtream.Serie.episodes": {"tf": 1}, "pyxtream.pyxtream.Season.episodes": {"tf": 1}}, "df": 2}}}}}}}, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}}, "df": 2}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.account_expiration": {"tf": 1}}, "df": 1}}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Episode.container_extension": {"tf": 1}}, "df": 1}}}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.action": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}}, "df": 5, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.is_adult": {"tf": 1}, "pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 2}}}, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.Channel.added": {"tf": 1}, "pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}}, "df": 2}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}}, "df": 1}}, "v": {"docs": {"pyxtream.pyxtream.Episode.av_info": {"tf": 1}}, "df": 1}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.account_expiration": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction.action": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.auth_data": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.authorization": {"tf": 1}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}}, "df": 2}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.SSL_FIRST": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 12}}}}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.name": {"tf": 1}, "pyxtream.pyxtream.Group.name": {"tf": 1}, "pyxtream.pyxtream.Episode.name": {"tf": 1}, "pyxtream.pyxtream.Serie.name": {"tf": 1}, "pyxtream.pyxtream.Season.name": {"tf": 1}, "pyxtream.pyxtream.XTream.name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 8}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {"pyxtream.pyxtream.Channel.date_now": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.Episode.episode_number": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.Channel.logo_path": {"tf": 1}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1}}, "df": 4}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.password": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Serie.plot": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "x": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.port": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.group_title": {"tf": 1}, "pyxtream.pyxtream.Channel.title": {"tf": 1}, "pyxtream.pyxtream.Episode.title": {"tf": 1}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1}}, "df": 4}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}}, "df": 1}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.Group.group_type": {"tf": 1}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1}}, "df": 5}}}, "o": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.Serie.youtube_trailer": {"tf": 1}}, "df": 1}}}}}}, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 2}}}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.date_now": {"tf": 1}}, "df": 1}, "a": {"docs": {"pyxtream.pyxtream.XTream.auth_data": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 3}}}}}}}, "e": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "w": {"docs": {"pyxtream.pyxtream.Channel.raw": {"tf": 1}, "pyxtream.pyxtream.Group.raw": {"tf": 1}, "pyxtream.pyxtream.Episode.raw": {"tf": 1}, "pyxtream.pyxtream.Serie.raw": {"tf": 1}}, "df": 4}}, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1}, "pyxtream.pyxtream.Group.region_longname": {"tf": 1}}, "df": 3}}}}, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.EndpointAction.response": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1}}, "df": 3}}}}, "y": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Serie.youtube_trailer": {"tf": 1}}, "df": 1}}}}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.Serie.xtream": {"tf": 1}, "pyxtream.pyxtream.XTream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.name": {"tf": 1}, "pyxtream.pyxtream.XTream.server": {"tf": 1}, "pyxtream.pyxtream.XTream.secure_server": {"tf": 1}, "pyxtream.pyxtream.XTream.username": {"tf": 1}, "pyxtream.pyxtream.XTream.password": {"tf": 1}, "pyxtream.pyxtream.XTream.base_url": {"tf": 1}, "pyxtream.pyxtream.XTream.base_url_ssl": {"tf": 1}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1}, "pyxtream.pyxtream.XTream.account_expiration": {"tf": 1}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1}, "pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1}, "pyxtream.pyxtream.XTream.auth_data": {"tf": 1}, "pyxtream.pyxtream.XTream.authorization": {"tf": 1}, "pyxtream.pyxtream.XTream.groups": {"tf": 1}, "pyxtream.pyxtream.XTream.channels": {"tf": 1}, "pyxtream.pyxtream.XTream.series": {"tf": 1}, "pyxtream.pyxtream.XTream.movies": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.connection_headers": {"tf": 1}, "pyxtream.pyxtream.XTream.state": {"tf": 1}, "pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1}, "pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 48}}}}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.connection_headers": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.host": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.movies": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_7days": {"tf": 1}}, "df": 3}}}}}}}}, "fullname": {"root": {"3": {"0": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.movies_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}}, "df": 2}}}}}, "docs": {}, "df": 0}, "7": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.movies_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}}, "df": 2}}}}}, "docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 8, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream": {"tf": 1}, "pyxtream.api": {"tf": 1}, "pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.SSL_FIRST": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.info": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.logo": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.logo_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.group_title": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.title": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.url": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.group_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.is_adult": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.added": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.epg_channel_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.date_now": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.raw": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.export_json": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.group_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.group_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.raw": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.channels": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.series": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.region_longname": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.title": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.info": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.raw": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.container_extension": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.episode_number": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.av_info": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.logo": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.url": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.logo": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.series_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.plot": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.youtube_trailer": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.genre": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.raw": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.xtream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.seasons": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.episodes": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.url": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Season": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Season.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Season.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Season.episodes": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.server": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.secure_server": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.username": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.password": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.base_url": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.base_url_ssl": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.account_expiration": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.auth_data": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.authorization": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.groups": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.channels": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.series": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.movies": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.movies_30days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.movies_7days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.connection_headers": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.state": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_progress": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.printx": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1.4142135623730951}, "pyxtream.rest_api": {"tf": 1}, "pyxtream.rest_api.EndpointAction": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.action": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}, "pyxtream.schemaValidator": {"tf": 1}, "pyxtream.schemaValidator.SchemaType": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}, "pyxtream.schemaValidator.schemaValidator": {"tf": 1}, "pyxtream.version": {"tf": 1}}, "df": 163}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.Channel.logo_path": {"tf": 1}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1}}, "df": 4}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.password": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Serie.plot": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "x": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.port": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {"pyxtream.api": {"tf": 1}, "pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.rest_api": {"tf": 1}, "pyxtream.rest_api.EndpointAction": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.action": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 34}, "p": {"docs": {"pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}}, "df": 2}}, "n": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}}, "df": 5, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.is_adult": {"tf": 1}, "pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 2}}}, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.Channel.added": {"tf": 1}, "pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}}, "df": 2}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}}, "df": 1}}, "v": {"docs": {"pyxtream.pyxtream.Episode.av_info": {"tf": 1}}, "df": 1}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.account_expiration": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction.action": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.auth_data": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.authorization": {"tf": 1}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 19}, "n": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Serie.genre": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.pyxtream.Channel.group_title": {"tf": 1}, "pyxtream.pyxtream.Channel.group_id": {"tf": 1}, "pyxtream.pyxtream.Group": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.name": {"tf": 1}, "pyxtream.pyxtream.Group.group_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.group_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.raw": {"tf": 1}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Group.channels": {"tf": 1}, "pyxtream.pyxtream.Group.series": {"tf": 1}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1}, "pyxtream.pyxtream.Group.region_longname": {"tf": 1}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 19, "s": {"docs": {"pyxtream.pyxtream.XTream.groups": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}}, "df": 10, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream.Channel.logo": {"tf": 1}, "pyxtream.pyxtream.Channel.logo_path": {"tf": 1}, "pyxtream.pyxtream.Episode.logo": {"tf": 1}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1}, "pyxtream.pyxtream.Serie.logo": {"tf": 1}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1}}, "df": 6}}, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.region_longname": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}}, "df": 3}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}}, "df": 3}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.cache_path": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.Channel": {"tf": 1}, "pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Channel.info": {"tf": 1}, "pyxtream.pyxtream.Channel.id": {"tf": 1}, "pyxtream.pyxtream.Channel.name": {"tf": 1}, "pyxtream.pyxtream.Channel.logo": {"tf": 1}, "pyxtream.pyxtream.Channel.logo_path": {"tf": 1}, "pyxtream.pyxtream.Channel.group_title": {"tf": 1}, "pyxtream.pyxtream.Channel.title": {"tf": 1}, "pyxtream.pyxtream.Channel.url": {"tf": 1}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.Channel.group_id": {"tf": 1}, "pyxtream.pyxtream.Channel.is_adult": {"tf": 1}, "pyxtream.pyxtream.Channel.added": {"tf": 1}, "pyxtream.pyxtream.Channel.epg_channel_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}, "pyxtream.pyxtream.Channel.date_now": {"tf": 1}, "pyxtream.pyxtream.Channel.raw": {"tf": 1}, "pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}}, "df": 21, "s": {"docs": {"pyxtream.pyxtream.Group.channels": {"tf": 1}, "pyxtream.pyxtream.XTream.channels": {"tf": 1}}, "df": 2}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.Episode.container_extension": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.connection_headers": {"tf": 1}}, "df": 1}}}}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.Channel.url": {"tf": 1}, "pyxtream.pyxtream.Episode.url": {"tf": 1}, "pyxtream.pyxtream.Serie.url": {"tf": 1}, "pyxtream.pyxtream.XTream.base_url": {"tf": 1}, "pyxtream.pyxtream.XTream.base_url_ssl": {"tf": 1}}, "df": 20}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.username": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 5, "s": {"docs": {"pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}}, "df": 4}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.state": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Serie": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.name": {"tf": 1}, "pyxtream.pyxtream.Serie.logo": {"tf": 1}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1}, "pyxtream.pyxtream.Serie.series_id": {"tf": 1}, "pyxtream.pyxtream.Serie.plot": {"tf": 1}, "pyxtream.pyxtream.Serie.youtube_trailer": {"tf": 1}, "pyxtream.pyxtream.Serie.genre": {"tf": 1}, "pyxtream.pyxtream.Serie.raw": {"tf": 1}, "pyxtream.pyxtream.Serie.xtream": {"tf": 1}, "pyxtream.pyxtream.Serie.seasons": {"tf": 1}, "pyxtream.pyxtream.Serie.episodes": {"tf": 1}, "pyxtream.pyxtream.Serie.url": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}}, "df": 15, "s": {"docs": {"pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.Group.series": {"tf": 1}, "pyxtream.pyxtream.Serie.series_id": {"tf": 1}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 14}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.server": {"tf": 1}, "pyxtream.pyxtream.XTream.secure_server": {"tf": 1}}, "df": 2}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Season": {"tf": 1}, "pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.Season.name": {"tf": 1}, "pyxtream.pyxtream.Season.episodes": {"tf": 1}}, "df": 4, "s": {"docs": {"pyxtream.pyxtream.Serie.seasons": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {"pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}}, "df": 1, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.secure_server": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.SSL_FIRST": {"tf": 1}, "pyxtream.pyxtream.XTream.base_url_ssl": {"tf": 1}}, "df": 2}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1}}, "df": 2}}}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 6, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator": {"tf": 1}, "pyxtream.schemaValidator.SchemaType": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}, "pyxtream.schemaValidator.schemaValidator": {"tf": 1.4142135623730951}}, "df": 15}}}}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.SchemaType": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}}, "df": 7}}}}}}}}}}, "b": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 9}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.base_url": {"tf": 1}, "pyxtream.pyxtream.XTream.base_url_ssl": {"tf": 1}}, "df": 2}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 8, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.validate_json": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.version": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.Channel.info": {"tf": 1}, "pyxtream.pyxtream.Episode.info": {"tf": 1}, "pyxtream.pyxtream.Episode.av_info": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 8}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 8}}}, "d": {"docs": {"pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.Channel.id": {"tf": 1}, "pyxtream.pyxtream.Channel.group_id": {"tf": 1}, "pyxtream.pyxtream.Channel.epg_channel_id": {"tf": 1}, "pyxtream.pyxtream.Group.group_id": {"tf": 1}, "pyxtream.pyxtream.Episode.id": {"tf": 1}, "pyxtream.pyxtream.Serie.series_id": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 9}, "s": {"docs": {"pyxtream.pyxtream.Channel.is_adult": {"tf": 1}}, "df": 1}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "v": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.Channel.epg_channel_id": {"tf": 1}}, "df": 5}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Episode": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.title": {"tf": 1}, "pyxtream.pyxtream.Episode.name": {"tf": 1}, "pyxtream.pyxtream.Episode.info": {"tf": 1}, "pyxtream.pyxtream.Episode.raw": {"tf": 1}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1}, "pyxtream.pyxtream.Episode.id": {"tf": 1}, "pyxtream.pyxtream.Episode.container_extension": {"tf": 1}, "pyxtream.pyxtream.Episode.episode_number": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.av_info": {"tf": 1}, "pyxtream.pyxtream.Episode.logo": {"tf": 1}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1}, "pyxtream.pyxtream.Episode.url": {"tf": 1}}, "df": 14, "s": {"docs": {"pyxtream.pyxtream.Serie.episodes": {"tf": 1}, "pyxtream.pyxtream.Season.episodes": {"tf": 1}}, "df": 2}}}}}}}, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}}, "df": 2}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.account_expiration": {"tf": 1}}, "df": 1}}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Episode.container_extension": {"tf": 1}}, "df": 1}}}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.action": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.SSL_FIRST": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 12}}}}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.name": {"tf": 1}, "pyxtream.pyxtream.Group.name": {"tf": 1}, "pyxtream.pyxtream.Episode.name": {"tf": 1}, "pyxtream.pyxtream.Serie.name": {"tf": 1}, "pyxtream.pyxtream.Season.name": {"tf": 1}, "pyxtream.pyxtream.XTream.name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 8}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {"pyxtream.pyxtream.Channel.date_now": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.Episode.episode_number": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.group_title": {"tf": 1}, "pyxtream.pyxtream.Channel.title": {"tf": 1}, "pyxtream.pyxtream.Episode.title": {"tf": 1}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1}}, "df": 4}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}}, "df": 1}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.Group.group_type": {"tf": 1}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1}}, "df": 5}}}, "o": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.Serie.youtube_trailer": {"tf": 1}}, "df": 1}}}}}}, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 2}}}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.date_now": {"tf": 1}}, "df": 1}, "a": {"docs": {"pyxtream.pyxtream.XTream.auth_data": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 3}}}}}}}, "e": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "w": {"docs": {"pyxtream.pyxtream.Channel.raw": {"tf": 1}, "pyxtream.pyxtream.Group.raw": {"tf": 1}, "pyxtream.pyxtream.Episode.raw": {"tf": 1}, "pyxtream.pyxtream.Serie.raw": {"tf": 1}}, "df": 4}}, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1}, "pyxtream.pyxtream.Group.region_longname": {"tf": 1}}, "df": 3}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api": {"tf": 1}, "pyxtream.rest_api.EndpointAction": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.action": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 18}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.EndpointAction.response": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1}}, "df": 3}}}}, "y": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Serie.youtube_trailer": {"tf": 1}}, "df": 1}}}}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.Serie.xtream": {"tf": 1}, "pyxtream.pyxtream.XTream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.name": {"tf": 1}, "pyxtream.pyxtream.XTream.server": {"tf": 1}, "pyxtream.pyxtream.XTream.secure_server": {"tf": 1}, "pyxtream.pyxtream.XTream.username": {"tf": 1}, "pyxtream.pyxtream.XTream.password": {"tf": 1}, "pyxtream.pyxtream.XTream.base_url": {"tf": 1}, "pyxtream.pyxtream.XTream.base_url_ssl": {"tf": 1}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1}, "pyxtream.pyxtream.XTream.account_expiration": {"tf": 1}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1}, "pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1}, "pyxtream.pyxtream.XTream.auth_data": {"tf": 1}, "pyxtream.pyxtream.XTream.authorization": {"tf": 1}, "pyxtream.pyxtream.XTream.groups": {"tf": 1}, "pyxtream.pyxtream.XTream.channels": {"tf": 1}, "pyxtream.pyxtream.XTream.series": {"tf": 1}, "pyxtream.pyxtream.XTream.movies": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.connection_headers": {"tf": 1}, "pyxtream.pyxtream.XTream.state": {"tf": 1}, "pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1}, "pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 48}}}}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.connection_headers": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.host": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.movies": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_7days": {"tf": 1}}, "df": 3}}}}}}}}, "annotation": {"root": {"docs": {"pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.Channel.group_id": {"tf": 1}, "pyxtream.pyxtream.Channel.is_adult": {"tf": 1}, "pyxtream.pyxtream.Channel.added": {"tf": 1}, "pyxtream.pyxtream.Channel.epg_channel_id": {"tf": 1}, "pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}, "pyxtream.pyxtream.Channel.date_now": {"tf": 1}, "pyxtream.pyxtream.Channel.raw": {"tf": 1}, "pyxtream.pyxtream.Group.raw": {"tf": 1}, "pyxtream.pyxtream.Episode.raw": {"tf": 1}, "pyxtream.pyxtream.Serie.raw": {"tf": 1}, "pyxtream.pyxtream.XTream.account_expiration": {"tf": 1}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1}, "pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}}, "df": 17, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.Channel.group_id": {"tf": 1}, "pyxtream.pyxtream.Channel.epg_channel_id": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}}, "df": 4}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.is_adult": {"tf": 1}, "pyxtream.pyxtream.Channel.added": {"tf": 1}, "pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}}, "df": 4}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.date_now": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.account_expiration": {"tf": 1}}, "df": 2}}}}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.raw": {"tf": 1}, "pyxtream.pyxtream.Group.raw": {"tf": 1}, "pyxtream.pyxtream.Episode.raw": {"tf": 1}, "pyxtream.pyxtream.Serie.raw": {"tf": 1}, "pyxtream.pyxtream.XTream.download_progress": {"tf": 1}}, "df": 5}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.pyxtream.XTream.account_expiration": {"tf": 1}}, "df": 1}}}}}}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.validate_json": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.rest_api.EndpointAction.response": {"tf": 1}}, "df": 1}}}}}, "w": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.EndpointAction.response": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.EndpointAction.response": {"tf": 1}}, "df": 1}}}}}}}}}}, "default_value": {"root": {"0": {"docs": {"pyxtream.pyxtream.Channel.is_adult": {"tf": 1}, "pyxtream.pyxtream.Channel.added": {"tf": 1}, "pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}}, "df": 4}, "1": {"2": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}}}, "docs": {"pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}}, "df": 2}, "2": {"docs": {"pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}}, "df": 1}, "3": {"docs": {"pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}}, "df": 1}, "4": {"docs": {"pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}}, "df": 1}, "5": {"docs": {"pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}}, "df": 1, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 3}}}}}}, "6": {"docs": {"pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}}, "df": 1}, "docs": {"pyxtream.pyxtream.Channel.info": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.logo": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.logo_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.group_title": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.title": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.url": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.group_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.epg_channel_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.raw": {"tf": 1}, "pyxtream.pyxtream.Group.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.group_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.group_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.raw": {"tf": 1}, "pyxtream.pyxtream.Episode.title": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.info": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.raw": {"tf": 1}, "pyxtream.pyxtream.Serie.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.logo": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.series_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.plot": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.youtube_trailer": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.genre": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.raw": {"tf": 1}, "pyxtream.pyxtream.Season.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.server": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.secure_server": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.username": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.password": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.base_url": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.base_url_ssl": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_schema": {"tf": 13.96424004376894}, "pyxtream.schemaValidator.series_info_schema": {"tf": 9.273618495495704}, "pyxtream.schemaValidator.live_schema": {"tf": 9}, "pyxtream.schemaValidator.vod_schema": {"tf": 8.888194417315589}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 4.47213595499958}}, "df": 58, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.SSL_FIRST": {"tf": 1}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1}}, "df": 2}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 6}, "pyxtream.schemaValidator.series_info_schema": {"tf": 4.123105625617661}, "pyxtream.schemaValidator.live_schema": {"tf": 4.242640687119285}, "pyxtream.schemaValidator.vod_schema": {"tf": 4.242640687119285}, "pyxtream.schemaValidator.group_schema": {"tf": 2}}, "df": 5}}}, "v": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1.4142135623730951}}, "df": 1}}, "x": {"2": {"7": {"docs": {"pyxtream.pyxtream.Channel.info": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.logo": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.logo_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.group_title": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.title": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.url": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.group_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.epg_channel_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.group_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.group_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.title": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.info": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.logo": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.series_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.plot": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.youtube_trailer": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.genre": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Season.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.server": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.secure_server": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.username": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.password": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.base_url": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.base_url_ssl": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_schema": {"tf": 18.601075237738275}, "pyxtream.schemaValidator.series_info_schema": {"tf": 12.806248474865697}, "pyxtream.schemaValidator.live_schema": {"tf": 11.832159566199232}, "pyxtream.schemaValidator.vod_schema": {"tf": 11.74734012447073}, "pyxtream.schemaValidator.group_schema": {"tf": 6.324555320336759}}, "df": 43}, "docs": {}, "df": 0}, "docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1.4142135623730951}}, "df": 3}}}, "t": {"docs": {"pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 2.6457513110645907}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}}, "df": 10}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.4142135623730951}}, "df": 3}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.series_type": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}}, "df": 5}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}}, "df": 1, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 2}, "pyxtream.schemaValidator.live_schema": {"tf": 2}, "pyxtream.schemaValidator.vod_schema": {"tf": 2}, "pyxtream.schemaValidator.group_schema": {"tf": 2}}, "df": 5, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}}, "df": 6}}}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 5}, "pyxtream.schemaValidator.series_info_schema": {"tf": 3.7416573867739413}, "pyxtream.schemaValidator.live_schema": {"tf": 3.1622776601683795}, "pyxtream.schemaValidator.vod_schema": {"tf": 3.1622776601683795}, "pyxtream.schemaValidator.group_schema": {"tf": 1.4142135623730951}}, "df": 5}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.7320508075688772}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 3}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 3}}}}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 3.4641016151377544}, "pyxtream.schemaValidator.series_info_schema": {"tf": 2.6457513110645907}, "pyxtream.schemaValidator.live_schema": {"tf": 2}, "pyxtream.schemaValidator.vod_schema": {"tf": 2}}, "df": 4}}}}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 4}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 4}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 1}}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1.4142135623730951}}, "df": 5}}}}, "t": {"docs": {"pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 2.6457513110645907}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}}, "df": 10}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 8}}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "/": {"2": {"0": {"2": {"0": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "w": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1}}}}}}}}, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.4142135623730951}}, "df": 1, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 3, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.7320508075688772}}, "df": 4}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.4142135623730951}}, "df": 2}}}}, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 3, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.7320508075688772}}, "df": 1}}, "t": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 4, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 4, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.4142135623730951}}, "df": 1}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.4142135623730951}}, "df": 1}}}, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 4}}, "e": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 1}, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "g": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1}}, "df": 1}}, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 2}}}}}}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.4142135623730951}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 6}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1}}, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 3}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 2}}}}, "n": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {"pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.4142135623730951}}, "df": 3}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 3}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 3.3166247903554}, "pyxtream.schemaValidator.series_info_schema": {"tf": 2}, "pyxtream.schemaValidator.live_schema": {"tf": 2}, "pyxtream.schemaValidator.vod_schema": {"tf": 2}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2.23606797749979}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.live_schema": {"tf": 2}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.group_schema": {"tf": 1.7320508075688772}}, "df": 5}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 2}}}, "s": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 2}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}}, "df": 2}}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 2}}}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1.4142135623730951}}, "df": 5}}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1}}}}}}}}, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2.8284271247461903}, "pyxtream.schemaValidator.series_info_schema": {"tf": 2}, "pyxtream.schemaValidator.live_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.4142135623730951}}, "df": 4}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.4142135623730951}}, "df": 3}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}}}, "y": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}}}}, "signature": {"root": {"0": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2}}, "df": 1}, "2": {"8": {"8": {"0": {"0": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "3": {"9": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.printx": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 2.8284271247461903}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2}}, "df": 4}, "docs": {}, "df": 0}, "5": {"0": {"0": {"0": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"pyxtream.api.get_live_categories_URL": {"tf": 4}, "pyxtream.api.get_live_streams_URL": {"tf": 4}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 4.47213595499958}, "pyxtream.api.get_vod_cat_URL": {"tf": 4}, "pyxtream.api.get_vod_streams_URL": {"tf": 4}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 4.47213595499958}, "pyxtream.api.get_series_cat_URL": {"tf": 4}, "pyxtream.api.get_series_URL": {"tf": 4}, "pyxtream.api.get_series_URL_by_category": {"tf": 4.47213595499958}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 4.47213595499958}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 4.47213595499958}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 4.47213595499958}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 4.898979485566356}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 4.47213595499958}, "pyxtream.api.get_all_epg_URL": {"tf": 5.656854249492381}, "pyxtream.pyxtream.Channel.__init__": {"tf": 4.47213595499958}, "pyxtream.pyxtream.Channel.export_json": {"tf": 3.1622776601683795}, "pyxtream.pyxtream.Group.__init__": {"tf": 4.47213595499958}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 3.7416573867739413}, "pyxtream.pyxtream.Episode.__init__": {"tf": 4.898979485566356}, "pyxtream.pyxtream.Serie.__init__": {"tf": 4}, "pyxtream.pyxtream.Serie.export_json": {"tf": 3.1622776601683795}, "pyxtream.pyxtream.Season.__init__": {"tf": 2.8284271247461903}, "pyxtream.pyxtream.XTream.__init__": {"tf": 12.727922061357855}, "pyxtream.pyxtream.XTream.printx": {"tf": 6.324555320336759}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 4.898979485566356}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 3.1622776601683795}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 3.1622776601683795}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 10.488088481701515}, "pyxtream.pyxtream.XTream.download_video": {"tf": 5.291502622129181}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 3.1622776601683795}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 3.4641016151377544}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 4.242640687119285}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 3.7416573867739413}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 3.7416573867739413}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 4.242640687119285}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 3.7416573867739413}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 3.1622776601683795}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 3.4641016151377544}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 9.055385138137417}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 3.1622776601683795}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 5.830951894845301}, "pyxtream.schemaValidator.schemaValidator": {"tf": 5.656854249492381}}, "df": 43, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}}, "df": 15}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.schemaValidator.schemaValidator": {"tf": 1}}, "df": 5}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1.4142135623730951}, "pyxtream.api.get_live_streams_URL": {"tf": 1.4142135623730951}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1.4142135623730951}, "pyxtream.api.get_vod_cat_URL": {"tf": 1.4142135623730951}, "pyxtream.api.get_vod_streams_URL": {"tf": 1.4142135623730951}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1.4142135623730951}, "pyxtream.api.get_series_cat_URL": {"tf": 1.4142135623730951}, "pyxtream.api.get_series_URL": {"tf": 1.4142135623730951}, "pyxtream.api.get_series_URL_by_category": {"tf": 1.4142135623730951}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1.4142135623730951}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1.4142135623730951}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1.4142135623730951}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1.4142135623730951}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1.4142135623730951}, "pyxtream.api.get_all_epg_URL": {"tf": 2}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 2.23606797749979}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}}, "df": 21, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 11}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 5}}}}, "l": {"docs": {}, "df": 0, "f": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 19}}, "c": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}}}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.schemaValidator": {"tf": 1.4142135623730951}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.schemaValidator": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}}, "df": 3}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 14}, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}}, "df": 4}}, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 4}}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}}, "df": 2}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.7320508075688772}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 2}}}}}}}, "r": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 2}}}, "y": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.schemaValidator.schemaValidator": {"tf": 1}}, "df": 1}}}}}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 4}}}}}}, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 4}}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}}, "df": 2}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 3}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 4}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 3}}}, "e": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 2}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Episode.__init__": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "n": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 5}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1.7320508075688772}}, "df": 4}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.schemaValidator.schemaValidator": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.schemaValidator.schemaValidator": {"tf": 1}}, "df": 1}}}}}}}}, "m": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}}}}, "bases": {"root": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.schemaValidator.SchemaType": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "doc": {"root": {"1": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}, "2": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}, "docs": {"pyxtream": {"tf": 1.7320508075688772}, "pyxtream.api": {"tf": 1.4142135623730951}, "pyxtream.api.get_live_categories_URL": {"tf": 1.7320508075688772}, "pyxtream.api.get_live_streams_URL": {"tf": 1.7320508075688772}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1.7320508075688772}, "pyxtream.api.get_vod_cat_URL": {"tf": 1.7320508075688772}, "pyxtream.api.get_vod_streams_URL": {"tf": 1.7320508075688772}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1.7320508075688772}, "pyxtream.api.get_series_cat_URL": {"tf": 1.7320508075688772}, "pyxtream.api.get_series_URL": {"tf": 1.7320508075688772}, "pyxtream.api.get_series_URL_by_category": {"tf": 1.7320508075688772}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1.7320508075688772}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1.7320508075688772}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1.7320508075688772}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1.7320508075688772}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1.7320508075688772}, "pyxtream.api.get_all_epg_URL": {"tf": 1.7320508075688772}, "pyxtream.pyxtream": {"tf": 6}, "pyxtream.pyxtream.SSL_FIRST": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.info": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.id": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.name": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.logo": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.logo_path": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.group_title": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.title": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.url": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.group_id": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.is_adult": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.added": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.epg_channel_id": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.age_days_from_added": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.date_now": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.raw": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.export_json": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.name": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.group_type": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.group_id": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.raw": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.channels": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.series": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.region_longname": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.title": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.name": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.info": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.raw": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.id": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.container_extension": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.episode_number": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.av_info": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.logo": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.url": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.name": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.logo": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.series_id": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.plot": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.youtube_trailer": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.genre": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.raw": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.xtream": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.seasons": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.episodes": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.url": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Season": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Season.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Season.name": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Season.episodes": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.__init__": {"tf": 5.477225575051661}, "pyxtream.pyxtream.XTream.name": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.server": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.secure_server": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.username": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.password": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.base_url": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.base_url_ssl": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.account_expiration": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.auth_data": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.authorization": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.groups": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.channels": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.series": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.movies": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.movies_30days": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.movies_7days": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.connection_headers": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.state": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.download_progress": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.printx": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 3.605551275463989}, "pyxtream.pyxtream.XTream.download_video": {"tf": 2.6457513110645907}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 4.123105625617661}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 2.23606797749979}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1.7320508075688772}, "pyxtream.rest_api": {"tf": 1.4142135623730951}, "pyxtream.rest_api.EndpointAction": {"tf": 1.7320508075688772}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1.7320508075688772}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1.7320508075688772}, "pyxtream.rest_api.EndpointAction.action": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 5.5677643628300215}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.debug": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.xt": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 3}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.live_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.channel_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.group_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.schemaValidator": {"tf": 1.7320508075688772}, "pyxtream.version": {"tf": 1.7320508075688772}}, "df": 163, "a": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 2.23606797749979}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 8, "p": {"docs": {}, "df": 0, "i": {"docs": {"pyxtream.api": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api": {"tf": 1}}, "df": 3}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 6}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1.4142135623730951}}, "df": 2}}}}}}}, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 5}}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}, "d": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 2}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 1}}}}, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "d": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1.4142135623730951}}, "df": 5}, "y": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 2}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "f": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 2.23606797749979}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 3}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 2}}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.api": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 2}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "d": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 2}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}, "i": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.api": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 6, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 3}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 3}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 3}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 2}, "d": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}}}}}}}, "m": {"3": {"docs": {}, "df": 0, "u": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}, "docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}, "y": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 2}, "i": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1.4142135623730951}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1.7320508075688772}}, "df": 3}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2}}, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {"pyxtream.pyxtream": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 2}, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 2}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 3}}}}}}}}}, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.7320508075688772}}, "df": 3}}}}}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.__init__": {"tf": 2.23606797749979}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 2.23606797749979}}, "df": 3}}}}}}, "o": {"docs": {}, "df": 0, "f": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 2.6457513110645907}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.7320508075688772}}, "df": 4, "f": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2.6457513110645907}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 2}}, "df": 2}}}}}}}, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 3}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 3}, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1.4142135623730951}}, "df": 3}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 5}}, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 3.1622776601683795}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 3}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 2}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 2.449489742783178}}, "df": 9, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 3}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 4, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 3}}}, "o": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 2}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 2.23606797749979}, "pyxtream.rest_api.FlaskWrap": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 8, "o": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 2}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.7320508075688772}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.4142135623730951}}, "df": 1}, "w": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": null}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": null}, "pyxtream.rest_api.FlaskWrap.name": {"tf": null}, "pyxtream.rest_api.FlaskWrap.run": {"tf": null}}, "df": 4}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}, "/": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 2}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}}, "df": 3}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 1}}, "n": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 6}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 6, "m": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2.449489742783178}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.7320508075688772}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1.4142135623730951}}, "df": 1}}}, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1.4142135623730951}}, "df": 1, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}}}}, "b": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2.23606797749979}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.7320508075688772}}, "df": 3, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 3}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "d": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 2.23606797749979}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 2}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 2}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1.7320508075688772}}, "df": 2}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}}}}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}, "y": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}}, "df": 1, "o": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1, "t": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 4, "e": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 2}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1.4142135623730951}}, "df": 3}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 5, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 4, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 2}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "v": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 2}}}, "f": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 5}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "d": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1.7320508075688772}}, "df": 1, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2.8284271247461903}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 2.23606797749979}}, "df": 3}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 4}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}}}}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {"pyxtream.rest_api": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}}}}}}}}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 3, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}, "w": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 3}, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 3}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 4, "i": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 2.23606797749979}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 2}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.4142135623730951}}, "df": 1}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 3}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 2}}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1.4142135623730951}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.4142135623730951}}, "df": 1}}}, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 2}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 3}}}}}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 2}}}}}}, "y": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}}}}, "pipeline": ["trimmer"], "_isPrebuiltIndex": true};
+ /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"pyxtream": {"fullname": "pyxtream", "modulename": "pyxtream", "kind": "module", "doc": "
\n"}, "pyxtream.api": {"fullname": "pyxtream.api", "modulename": "pyxtream.api", "kind": "module", "doc": "API URL builders
\n"}, "pyxtream.api.get_live_categories_URL": {"fullname": "pyxtream.api.get_live_categories_URL", "modulename": "pyxtream.api", "qualname": "get_live_categories_URL", "kind": "function", "doc": "
\n", "signature": "(base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_live_streams_URL": {"fullname": "pyxtream.api.get_live_streams_URL", "modulename": "pyxtream.api", "qualname": "get_live_streams_URL", "kind": "function", "doc": "
\n", "signature": "(base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_live_streams_URL_by_category": {"fullname": "pyxtream.api.get_live_streams_URL_by_category", "modulename": "pyxtream.api", "qualname": "get_live_streams_URL_by_category", "kind": "function", "doc": "
\n", "signature": "(category_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_vod_cat_URL": {"fullname": "pyxtream.api.get_vod_cat_URL", "modulename": "pyxtream.api", "qualname": "get_vod_cat_URL", "kind": "function", "doc": "
\n", "signature": "(base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_vod_streams_URL": {"fullname": "pyxtream.api.get_vod_streams_URL", "modulename": "pyxtream.api", "qualname": "get_vod_streams_URL", "kind": "function", "doc": "
\n", "signature": "(base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_vod_streams_URL_by_category": {"fullname": "pyxtream.api.get_vod_streams_URL_by_category", "modulename": "pyxtream.api", "qualname": "get_vod_streams_URL_by_category", "kind": "function", "doc": "
\n", "signature": "(category_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_series_cat_URL": {"fullname": "pyxtream.api.get_series_cat_URL", "modulename": "pyxtream.api", "qualname": "get_series_cat_URL", "kind": "function", "doc": "
\n", "signature": "(base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_series_URL": {"fullname": "pyxtream.api.get_series_URL", "modulename": "pyxtream.api", "qualname": "get_series_URL", "kind": "function", "doc": "
\n", "signature": "(base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_series_URL_by_category": {"fullname": "pyxtream.api.get_series_URL_by_category", "modulename": "pyxtream.api", "qualname": "get_series_URL_by_category", "kind": "function", "doc": "
\n", "signature": "(category_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_series_info_URL_by_ID": {"fullname": "pyxtream.api.get_series_info_URL_by_ID", "modulename": "pyxtream.api", "qualname": "get_series_info_URL_by_ID", "kind": "function", "doc": "
\n", "signature": "(series_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_VOD_info_URL_by_ID": {"fullname": "pyxtream.api.get_VOD_info_URL_by_ID", "modulename": "pyxtream.api", "qualname": "get_VOD_info_URL_by_ID", "kind": "function", "doc": "
\n", "signature": "(vod_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_live_epg_URL_by_stream": {"fullname": "pyxtream.api.get_live_epg_URL_by_stream", "modulename": "pyxtream.api", "qualname": "get_live_epg_URL_by_stream", "kind": "function", "doc": "
\n", "signature": "(stream_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"fullname": "pyxtream.api.get_live_epg_URL_by_stream_and_limit", "modulename": "pyxtream.api", "qualname": "get_live_epg_URL_by_stream_and_limit", "kind": "function", "doc": "
\n", "signature": "(stream_id , limit , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"fullname": "pyxtream.api.get_all_live_epg_URL_by_stream", "modulename": "pyxtream.api", "qualname": "get_all_live_epg_URL_by_stream", "kind": "function", "doc": "
\n", "signature": "(stream_id , base : str ) -> str : ", "funcdef": "def"}, "pyxtream.api.get_all_epg_URL": {"fullname": "pyxtream.api.get_all_epg_URL", "modulename": "pyxtream.api", "qualname": "get_all_epg_URL", "kind": "function", "doc": "
\n", "signature": "(base : str , username : str , password : str ) -> str : ", "funcdef": "def"}, "pyxtream.constants": {"fullname": "pyxtream.constants", "modulename": "pyxtream.constants", "kind": "module", "doc": "Centralized constants for the pyxtream library
\n"}, "pyxtream.constants.SSL_FIRST": {"fullname": "pyxtream.constants.SSL_FIRST", "modulename": "pyxtream.constants", "qualname": "SSL_FIRST", "kind": "variable", "doc": "
\n", "default_value": "True"}, "pyxtream.constants.SECONDS_IN_DAY": {"fullname": "pyxtream.constants.SECONDS_IN_DAY", "modulename": "pyxtream.constants", "qualname": "SECONDS_IN_DAY", "kind": "variable", "doc": "
\n", "default_value": "86400"}, "pyxtream.constants.SECONDS_IN_YEAR": {"fullname": "pyxtream.constants.SECONDS_IN_YEAR", "modulename": "pyxtream.constants", "qualname": "SECONDS_IN_YEAR", "kind": "variable", "doc": "
\n", "default_value": "31536000"}, "pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"fullname": "pyxtream.constants.DEFAULT_RELOAD_TIME_SEC", "modulename": "pyxtream.constants", "qualname": "DEFAULT_RELOAD_TIME_SEC", "kind": "variable", "doc": "
\n", "default_value": "28800"}, "pyxtream.constants.DEFAULT_FLASK_PORT": {"fullname": "pyxtream.constants.DEFAULT_FLASK_PORT", "modulename": "pyxtream.constants", "qualname": "DEFAULT_FLASK_PORT", "kind": "variable", "doc": "
\n", "default_value": "5000"}, "pyxtream.constants.AUTH_MAX_ATTEMPTS": {"fullname": "pyxtream.constants.AUTH_MAX_ATTEMPTS", "modulename": "pyxtream.constants", "qualname": "AUTH_MAX_ATTEMPTS", "kind": "variable", "doc": "
\n", "default_value": "3"}, "pyxtream.constants.AUTH_TIMEOUT_SEC": {"fullname": "pyxtream.constants.AUTH_TIMEOUT_SEC", "modulename": "pyxtream.constants", "qualname": "AUTH_TIMEOUT_SEC", "kind": "variable", "doc": "
\n", "default_value": "4"}, "pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"fullname": "pyxtream.constants.AUTH_LOOP_EXIT_VALUE", "modulename": "pyxtream.constants", "qualname": "AUTH_LOOP_EXIT_VALUE", "kind": "variable", "doc": "
\n", "default_value": "31"}, "pyxtream.constants.REQUEST_MAX_ATTEMPTS": {"fullname": "pyxtream.constants.REQUEST_MAX_ATTEMPTS", "modulename": "pyxtream.constants", "qualname": "REQUEST_MAX_ATTEMPTS", "kind": "variable", "doc": "
\n", "default_value": "10"}, "pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"fullname": "pyxtream.constants.REQUEST_DEFAULT_TIMEOUT", "modulename": "pyxtream.constants", "qualname": "REQUEST_DEFAULT_TIMEOUT", "kind": "variable", "doc": "
\n", "default_value": "(2, 15)"}, "pyxtream.constants.DOWNLOAD_TIMEOUT_SEC": {"fullname": "pyxtream.constants.DOWNLOAD_TIMEOUT_SEC", "modulename": "pyxtream.constants", "qualname": "DOWNLOAD_TIMEOUT_SEC", "kind": "variable", "doc": "
\n", "default_value": "10"}, "pyxtream.constants.KB_FACTOR": {"fullname": "pyxtream.constants.KB_FACTOR", "modulename": "pyxtream.constants", "qualname": "KB_FACTOR", "kind": "variable", "doc": "
\n", "default_value": "1024"}, "pyxtream.constants.MB_FACTOR": {"fullname": "pyxtream.constants.MB_FACTOR", "modulename": "pyxtream.constants", "qualname": "MB_FACTOR", "kind": "variable", "doc": "
\n", "default_value": "1048576"}, "pyxtream.constants.DOWNLOAD_BLOCK_SIZE": {"fullname": "pyxtream.constants.DOWNLOAD_BLOCK_SIZE", "modulename": "pyxtream.constants", "qualname": "DOWNLOAD_BLOCK_SIZE", "kind": "variable", "doc": "
\n", "default_value": "4194304"}, "pyxtream.constants.REQUEST_BLOCK_SIZE": {"fullname": "pyxtream.constants.REQUEST_BLOCK_SIZE", "modulename": "pyxtream.constants", "qualname": "REQUEST_BLOCK_SIZE", "kind": "variable", "doc": "
\n", "default_value": "1048576"}, "pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"fullname": "pyxtream.constants.CATCH_ALL_CATEGORY_ID", "modulename": "pyxtream.constants", "qualname": "CATCH_ALL_CATEGORY_ID", "kind": "variable", "doc": "
\n", "default_value": "9999"}, "pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"fullname": "pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD", "modulename": "pyxtream.constants", "qualname": "MOVIES_RECENT_30_DAYS_THRESHOLD", "kind": "variable", "doc": "
\n", "default_value": "31"}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"fullname": "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD", "modulename": "pyxtream.constants", "qualname": "MOVIES_RECENT_7_DAYS_THRESHOLD", "kind": "variable", "doc": "
\n", "default_value": "7"}, "pyxtream.pyxtream": {"fullname": "pyxtream.pyxtream", "modulename": "pyxtream.pyxtream", "kind": "module", "doc": "High-performance Python library for Xtream Codes IPTV panels. Supports Live TV, VOD, and Series.
\n"}, "pyxtream.pyxtream.Channel": {"fullname": "pyxtream.pyxtream.Channel", "modulename": "pyxtream.pyxtream", "qualname": "Channel", "kind": "class", "doc": "Represents a Live TV or VOD stream.
\n"}, "pyxtream.pyxtream.Channel.__init__": {"fullname": "pyxtream.pyxtream.Channel.__init__", "modulename": "pyxtream.pyxtream", "qualname": "Channel.__init__", "kind": "function", "doc": "
\n", "signature": "(xtream : object , group_title , stream_info : dict ) "}, "pyxtream.pyxtream.Channel.date_now": {"fullname": "pyxtream.pyxtream.Channel.date_now", "modulename": "pyxtream.pyxtream", "qualname": "Channel.date_now", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Channel.stream_type": {"fullname": "pyxtream.pyxtream.Channel.stream_type", "modulename": "pyxtream.pyxtream", "qualname": "Channel.stream_type", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Channel.export_json": {"fullname": "pyxtream.pyxtream.Channel.export_json", "modulename": "pyxtream.pyxtream", "qualname": "Channel.export_json", "kind": "function", "doc": "Return a dictionary representation of the channel with its computed URL.
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.pyxtream.Group": {"fullname": "pyxtream.pyxtream.Group", "modulename": "pyxtream.pyxtream", "qualname": "Group", "kind": "class", "doc": "Represents a category of channels, movies, or series.
\n"}, "pyxtream.pyxtream.Group.__init__": {"fullname": "pyxtream.pyxtream.Group.__init__", "modulename": "pyxtream.pyxtream", "qualname": "Group.__init__", "kind": "function", "doc": "
\n", "signature": "(group_info : dict , stream_type : str ) "}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"fullname": "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname", "modulename": "pyxtream.pyxtream", "qualname": "Group.convert_region_shortname_to_fullname", "kind": "function", "doc": "
\n", "signature": "(self , shortname ): ", "funcdef": "def"}, "pyxtream.pyxtream.Group.raw": {"fullname": "pyxtream.pyxtream.Group.raw", "modulename": "pyxtream.pyxtream", "qualname": "Group.raw", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Group.channels": {"fullname": "pyxtream.pyxtream.Group.channels", "modulename": "pyxtream.pyxtream", "qualname": "Group.channels", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Group.series": {"fullname": "pyxtream.pyxtream.Group.series", "modulename": "pyxtream.pyxtream", "qualname": "Group.series", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Group.name": {"fullname": "pyxtream.pyxtream.Group.name", "modulename": "pyxtream.pyxtream", "qualname": "Group.name", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Group.region_shortname": {"fullname": "pyxtream.pyxtream.Group.region_shortname", "modulename": "pyxtream.pyxtream", "qualname": "Group.region_shortname", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Group.region_longname": {"fullname": "pyxtream.pyxtream.Group.region_longname", "modulename": "pyxtream.pyxtream", "qualname": "Group.region_longname", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode": {"fullname": "pyxtream.pyxtream.Episode", "modulename": "pyxtream.pyxtream", "qualname": "Episode", "kind": "class", "doc": "Represents a single episode of a TV series.
\n"}, "pyxtream.pyxtream.Episode.__init__": {"fullname": "pyxtream.pyxtream.Episode.__init__", "modulename": "pyxtream.pyxtream", "qualname": "Episode.__init__", "kind": "function", "doc": "
\n", "signature": "(xtream : object , series_info , group_title , episode_info : dict ) "}, "pyxtream.pyxtream.Episode.raw": {"fullname": "pyxtream.pyxtream.Episode.raw", "modulename": "pyxtream.pyxtream", "qualname": "Episode.raw", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.title": {"fullname": "pyxtream.pyxtream.Episode.title", "modulename": "pyxtream.pyxtream", "qualname": "Episode.title", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.name": {"fullname": "pyxtream.pyxtream.Episode.name", "modulename": "pyxtream.pyxtream", "qualname": "Episode.name", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.group_title": {"fullname": "pyxtream.pyxtream.Episode.group_title", "modulename": "pyxtream.pyxtream", "qualname": "Episode.group_title", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.id": {"fullname": "pyxtream.pyxtream.Episode.id", "modulename": "pyxtream.pyxtream", "qualname": "Episode.id", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.container_extension": {"fullname": "pyxtream.pyxtream.Episode.container_extension", "modulename": "pyxtream.pyxtream", "qualname": "Episode.container_extension", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.episode_number": {"fullname": "pyxtream.pyxtream.Episode.episode_number", "modulename": "pyxtream.pyxtream", "qualname": "Episode.episode_number", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.av_info": {"fullname": "pyxtream.pyxtream.Episode.av_info", "modulename": "pyxtream.pyxtream", "qualname": "Episode.av_info", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.logo": {"fullname": "pyxtream.pyxtream.Episode.logo", "modulename": "pyxtream.pyxtream", "qualname": "Episode.logo", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.logo_path": {"fullname": "pyxtream.pyxtream.Episode.logo_path", "modulename": "pyxtream.pyxtream", "qualname": "Episode.logo_path", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Episode.url": {"fullname": "pyxtream.pyxtream.Episode.url", "modulename": "pyxtream.pyxtream", "qualname": "Episode.url", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie": {"fullname": "pyxtream.pyxtream.Serie", "modulename": "pyxtream.pyxtream", "qualname": "Serie", "kind": "class", "doc": "Represents a TV Series collection.
\n"}, "pyxtream.pyxtream.Serie.__init__": {"fullname": "pyxtream.pyxtream.Serie.__init__", "modulename": "pyxtream.pyxtream", "qualname": "Serie.__init__", "kind": "function", "doc": "
\n", "signature": "(xtream : object , series_info : dict ) "}, "pyxtream.pyxtream.Serie.raw": {"fullname": "pyxtream.pyxtream.Serie.raw", "modulename": "pyxtream.pyxtream", "qualname": "Serie.raw", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie.xtream": {"fullname": "pyxtream.pyxtream.Serie.xtream", "modulename": "pyxtream.pyxtream", "qualname": "Serie.xtream", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie.name": {"fullname": "pyxtream.pyxtream.Serie.name", "modulename": "pyxtream.pyxtream", "qualname": "Serie.name", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie.logo": {"fullname": "pyxtream.pyxtream.Serie.logo", "modulename": "pyxtream.pyxtream", "qualname": "Serie.logo", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie.logo_path": {"fullname": "pyxtream.pyxtream.Serie.logo_path", "modulename": "pyxtream.pyxtream", "qualname": "Serie.logo_path", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie.seasons": {"fullname": "pyxtream.pyxtream.Serie.seasons", "modulename": "pyxtream.pyxtream", "qualname": "Serie.seasons", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie.episodes": {"fullname": "pyxtream.pyxtream.Serie.episodes", "modulename": "pyxtream.pyxtream", "qualname": "Serie.episodes", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie.url": {"fullname": "pyxtream.pyxtream.Serie.url", "modulename": "pyxtream.pyxtream", "qualname": "Serie.url", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Serie.export_json": {"fullname": "pyxtream.pyxtream.Serie.export_json", "modulename": "pyxtream.pyxtream", "qualname": "Serie.export_json", "kind": "function", "doc": "Return a dictionary representation of the series.
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.pyxtream.Season": {"fullname": "pyxtream.pyxtream.Season", "modulename": "pyxtream.pyxtream", "qualname": "Season", "kind": "class", "doc": "Represents a specific season within a series.
\n"}, "pyxtream.pyxtream.Season.__init__": {"fullname": "pyxtream.pyxtream.Season.__init__", "modulename": "pyxtream.pyxtream", "qualname": "Season.__init__", "kind": "function", "doc": "
\n", "signature": "(name ) "}, "pyxtream.pyxtream.Season.name": {"fullname": "pyxtream.pyxtream.Season.name", "modulename": "pyxtream.pyxtream", "qualname": "Season.name", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.Season.episodes": {"fullname": "pyxtream.pyxtream.Season.episodes", "modulename": "pyxtream.pyxtream", "qualname": "Season.episodes", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream": {"fullname": "pyxtream.pyxtream.XTream", "modulename": "pyxtream.pyxtream", "qualname": "XTream", "kind": "class", "doc": "Core client for interacting with Xtream Codes IPTV providers.
\n"}, "pyxtream.pyxtream.XTream.__init__": {"fullname": "pyxtream.pyxtream.XTream.__init__", "modulename": "pyxtream.pyxtream", "qualname": "XTream.__init__", "kind": "function", "doc": "Initialize the XTream client.
\n\nSets up the connection parameters, authentication state, and local cache\nconfiguration for interacting with an Xtream Codes IPTV provider.
\n\nArgs:\n provider_name (str): Human-readable name of the IPTV provider.\n provider_username (str): Username for authentication.\n provider_password (str): Password for authentication.\n provider_url (str): Base URL of the IPTV provider.\n headers (dict, optional): Custom HTTP headers for requests. Defaults to {}.\n hide_adult_content (bool, optional): If True, filters out adult content. Defaults to False.\n cache_path (str, optional): Directory for local data persistence. Defaults to \"\".\n reload_time_sec (int, optional): Cache TTL in seconds. Defaults to DEFAULT_RELOAD_TIME_SEC.\n validate_json (bool, optional): If True, validates responses against schemas. Defaults to False.\n enable_flask (bool, optional): If True, starts the REST API server. Defaults to False.\n debug_flask (bool, optional): If True, enables Flask debug mode. Defaults to True.\n flask_port (int, optional): Port for the Flask server. Defaults to DEFAULT_FLASK_PORT.
\n", "signature": "(\tprovider_name : str , \tprovider_username : str , \tprovider_password : str , \tprovider_url : str , \theaders : dict = {} , \thide_adult_content : bool = False , \tcache_path : str = '' , \treload_time_sec : int = 28800 , \tvalidate_json : bool = False , \tenable_flask : bool = False , \tdebug_flask : bool = True , \tflask_port : int = 5000 ) "}, "pyxtream.pyxtream.XTream.server": {"fullname": "pyxtream.pyxtream.XTream.server", "modulename": "pyxtream.pyxtream", "qualname": "XTream.server", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.username": {"fullname": "pyxtream.pyxtream.XTream.username", "modulename": "pyxtream.pyxtream", "qualname": "XTream.username", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.password": {"fullname": "pyxtream.pyxtream.XTream.password", "modulename": "pyxtream.pyxtream", "qualname": "XTream.password", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.name": {"fullname": "pyxtream.pyxtream.XTream.name", "modulename": "pyxtream.pyxtream", "qualname": "XTream.name", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.cache_path": {"fullname": "pyxtream.pyxtream.XTream.cache_path", "modulename": "pyxtream.pyxtream", "qualname": "XTream.cache_path", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.hide_adult_content": {"fullname": "pyxtream.pyxtream.XTream.hide_adult_content", "modulename": "pyxtream.pyxtream", "qualname": "XTream.hide_adult_content", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"fullname": "pyxtream.pyxtream.XTream.threshold_time_sec", "modulename": "pyxtream.pyxtream", "qualname": "XTream.threshold_time_sec", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.validate_json": {"fullname": "pyxtream.pyxtream.XTream.validate_json", "modulename": "pyxtream.pyxtream", "qualname": "XTream.validate_json", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.live_type": {"fullname": "pyxtream.pyxtream.XTream.live_type", "modulename": "pyxtream.pyxtream", "qualname": "XTream.live_type", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.vod_type": {"fullname": "pyxtream.pyxtream.XTream.vod_type", "modulename": "pyxtream.pyxtream", "qualname": "XTream.vod_type", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.series_type": {"fullname": "pyxtream.pyxtream.XTream.series_type", "modulename": "pyxtream.pyxtream", "qualname": "XTream.series_type", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"fullname": "pyxtream.pyxtream.XTream.live_catch_all_group", "modulename": "pyxtream.pyxtream", "qualname": "XTream.live_catch_all_group", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"fullname": "pyxtream.pyxtream.XTream.vod_catch_all_group", "modulename": "pyxtream.pyxtream", "qualname": "XTream.vod_catch_all_group", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"fullname": "pyxtream.pyxtream.XTream.series_catch_all_group", "modulename": "pyxtream.pyxtream", "qualname": "XTream.series_catch_all_group", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.auth_data": {"fullname": "pyxtream.pyxtream.XTream.auth_data", "modulename": "pyxtream.pyxtream", "qualname": "XTream.auth_data", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.authorization": {"fullname": "pyxtream.pyxtream.XTream.authorization", "modulename": "pyxtream.pyxtream", "qualname": "XTream.authorization", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.groups": {"fullname": "pyxtream.pyxtream.XTream.groups", "modulename": "pyxtream.pyxtream", "qualname": "XTream.groups", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.channels": {"fullname": "pyxtream.pyxtream.XTream.channels", "modulename": "pyxtream.pyxtream", "qualname": "XTream.channels", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.series": {"fullname": "pyxtream.pyxtream.XTream.series", "modulename": "pyxtream.pyxtream", "qualname": "XTream.series", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.movies": {"fullname": "pyxtream.pyxtream.XTream.movies", "modulename": "pyxtream.pyxtream", "qualname": "XTream.movies", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.movies_30days": {"fullname": "pyxtream.pyxtream.XTream.movies_30days", "modulename": "pyxtream.pyxtream", "qualname": "XTream.movies_30days", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.movies_7days": {"fullname": "pyxtream.pyxtream.XTream.movies_7days", "modulename": "pyxtream.pyxtream", "qualname": "XTream.movies_7days", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.connection_headers": {"fullname": "pyxtream.pyxtream.XTream.connection_headers", "modulename": "pyxtream.pyxtream", "qualname": "XTream.connection_headers", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.state": {"fullname": "pyxtream.pyxtream.XTream.state", "modulename": "pyxtream.pyxtream", "qualname": "XTream.state", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.download_progress": {"fullname": "pyxtream.pyxtream.XTream.download_progress", "modulename": "pyxtream.pyxtream", "qualname": "XTream.download_progress", "kind": "variable", "doc": "
\n", "annotation": ": dict"}, "pyxtream.pyxtream.XTream.app_fullpath": {"fullname": "pyxtream.pyxtream.XTream.app_fullpath", "modulename": "pyxtream.pyxtream", "qualname": "XTream.app_fullpath", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.html_template_folder": {"fullname": "pyxtream.pyxtream.XTream.html_template_folder", "modulename": "pyxtream.pyxtream", "qualname": "XTream.html_template_folder", "kind": "variable", "doc": "
\n"}, "pyxtream.pyxtream.XTream.printx": {"fullname": "pyxtream.pyxtream.XTream.printx", "modulename": "pyxtream.pyxtream", "qualname": "XTream.printx", "kind": "function", "doc": "Print a message prefixed with the provider name.
\n\nUseful for logging multiple instances of the XTream class simultaneously.
\n\nArgs:\n msg (str): The message to be printed.\n end (str, optional): The string appended after the last value. Defaults to \"\\n\".\n flush (bool, optional): Whether to forcibly flush the stream. Defaults to True.
\n", "signature": "(self , msg : str , end = ' \\n ' , flush = True ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.get_download_progress": {"fullname": "pyxtream.pyxtream.XTream.get_download_progress", "modulename": "pyxtream.pyxtream", "qualname": "XTream.get_download_progress", "kind": "function", "doc": "Return the current download progress as a JSON string.
\n\nRetrieves the state of the downloader, including total bytes and progress.
\n\nArgs:\n stream_id (int, optional): The specific stream ID to check. Currently unused.
\n\nReturns:\n str: A JSON-formatted string containing 'StreamId', 'Total', and 'Progress'.
\n", "signature": "(self , stream_id : int = None ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.get_last_7days": {"fullname": "pyxtream.pyxtream.XTream.get_last_7days", "modulename": "pyxtream.pyxtream", "qualname": "XTream.get_last_7days", "kind": "function", "doc": "Return movies added in the last 7 days as a JSON string.
\n\nReturns:\n str: A JSON-formatted list of movies added recently.
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.get_last_30days": {"fullname": "pyxtream.pyxtream.XTream.get_last_30days", "modulename": "pyxtream.pyxtream", "qualname": "XTream.get_last_30days", "kind": "function", "doc": "Return movies added in the last 30 days as a JSON string.
\n\nReturns:\n str: A JSON-formatted list of movies added in the last month.
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.get_state": {"fullname": "pyxtream.pyxtream.XTream.get_state", "modulename": "pyxtream.pyxtream", "qualname": "XTream.get_state", "kind": "function", "doc": "Return the current authentication and loading state as a JSON string.
\n\nReturns:\n str: A JSON string containing 'authenticated', 'loaded', and 'offline' flags.
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.search_stream": {"fullname": "pyxtream.pyxtream.XTream.search_stream", "modulename": "pyxtream.pyxtream", "qualname": "XTream.search_stream", "kind": "function", "doc": "Search for streams across the loaded collection.
\n\nUses regular expressions to find matches in titles across specified stream types.
\n\nArgs:\n keyword (str): The regex pattern or search term.\n ignore_case (bool, optional): Whether to ignore case in the regex. Defaults to True.\n return_type (str, optional): The output format, either 'LIST' or 'JSON'. Defaults to \"LIST\".\n stream_type (list, optional): Collections to search in. Defaults to (\"series\", \"movies\", \"channels\").\n added_after (datetime, optional): Filter results added after this date.
\n\nReturns:\n list: A list of matching items in the requested format (LIST or JSON string).
\n", "signature": "(\tself , \tkeyword : str , \tignore_case : bool = True , \treturn_type : str = 'LIST' , \tstream_type : list = ( 'series' , 'movies' , 'channels' ) , \tadded_after : datetime . datetime = None ) -> list : ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.download_video": {"fullname": "pyxtream.pyxtream.XTream.download_video", "modulename": "pyxtream.pyxtream", "qualname": "XTream.download_video", "kind": "function", "doc": "Download a video stream by its ID and return the local file path.
\n\nAttempts to resolve the stream ID to a movie or series episode and downloads it.
\n\nArgs:\n stream_id (int): The unique ID of the stream to download.
\n\nReturns:\n str: The absolute local path to the downloaded file, or an empty string on failure.
\n", "signature": "(self , stream_id : int ) -> str : ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.authenticate": {"fullname": "pyxtream.pyxtream.XTream.authenticate", "modulename": "pyxtream.pyxtream", "qualname": "XTream.authenticate", "kind": "function", "doc": "Authenticate with the provider and initialize base URLs.
\n\nAttempts to log in using the player_api.php endpoint. On failure, it triggers\nthe offline fallback mechanism if a local cache exists.
\n\nSets the authentication state and base URLs for subsequent API calls.
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.load_iptv": {"fullname": "pyxtream.pyxtream.XTream.load_iptv", "modulename": "pyxtream.pyxtream", "qualname": "XTream.load_iptv", "kind": "function", "doc": "Orchestrates the loading and processing of all IPTV content.
\n\nIterates through Live, VOD, and Series types. Loads categories and streams\nfrom the local cache if available and fresh, or fetches them from the provider.
\n\nReturns:\n bool: True if the loading cycle completed successfully.
\n", "signature": "(self ) -> bool : ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"fullname": "pyxtream.pyxtream.XTream.get_series_info_by_id", "modulename": "pyxtream.pyxtream", "qualname": "XTream.get_series_info_by_id", "kind": "function", "doc": "Fetch and populate seasons and episodes for a specific series object.
\n\nArgs:\n get_series (Serie): The series object to be populated with detailed data.
\n", "signature": "(self , get_series : dict ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.vodInfoByID": {"fullname": "pyxtream.pyxtream.XTream.vodInfoByID", "modulename": "pyxtream.pyxtream", "qualname": "XTream.vodInfoByID", "kind": "function", "doc": "Fetch VOD information by movie ID.
\n\nArgs:\n vod_id (int|str): The movie ID.
\n", "signature": "(self , vod_id ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"fullname": "pyxtream.pyxtream.XTream.liveEpgByStream", "modulename": "pyxtream.pyxtream", "qualname": "XTream.liveEpgByStream", "kind": "function", "doc": "Fetch current short EPG data for a live stream.
\n\nArgs:\n stream_id (int|str): The stream ID.
\n", "signature": "(self , stream_id ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"fullname": "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit", "modulename": "pyxtream.pyxtream", "qualname": "XTream.liveEpgByStreamAndLimit", "kind": "function", "doc": "Fetch short EPG data for a live stream with a result limit.
\n\nArgs:\n stream_id (int|str): The stream ID.\n limit (int): Maximum number of entries.
\n", "signature": "(self , stream_id , limit ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"fullname": "pyxtream.pyxtream.XTream.allLiveEpgByStream", "modulename": "pyxtream.pyxtream", "qualname": "XTream.allLiveEpgByStream", "kind": "function", "doc": "Fetch all available EPG data for a live stream via simple_data_table.
\n\nArgs:\n stream_id (int|str): The stream ID.
\n", "signature": "(self , stream_id ): ", "funcdef": "def"}, "pyxtream.pyxtream.XTream.allEpg": {"fullname": "pyxtream.pyxtream.XTream.allEpg", "modulename": "pyxtream.pyxtream", "qualname": "XTream.allEpg", "kind": "function", "doc": "Fetch the complete XMLTV EPG for all channels.
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.rest_api": {"fullname": "pyxtream.rest_api", "modulename": "pyxtream.rest_api", "kind": "module", "doc": "Rest API
\n"}, "pyxtream.rest_api.EndpointAction": {"fullname": "pyxtream.rest_api.EndpointAction", "modulename": "pyxtream.rest_api", "qualname": "EndpointAction", "kind": "class", "doc": "
\n"}, "pyxtream.rest_api.EndpointAction.__init__": {"fullname": "pyxtream.rest_api.EndpointAction.__init__", "modulename": "pyxtream.rest_api", "qualname": "EndpointAction.__init__", "kind": "function", "doc": "
\n", "signature": "(action , function_name ) "}, "pyxtream.rest_api.EndpointAction.response": {"fullname": "pyxtream.rest_api.EndpointAction.response", "modulename": "pyxtream.rest_api", "qualname": "EndpointAction.response", "kind": "variable", "doc": "
\n", "annotation": ": flask.wrappers.Response"}, "pyxtream.rest_api.EndpointAction.function_name": {"fullname": "pyxtream.rest_api.EndpointAction.function_name", "modulename": "pyxtream.rest_api", "qualname": "EndpointAction.function_name", "kind": "variable", "doc": "
\n"}, "pyxtream.rest_api.EndpointAction.action": {"fullname": "pyxtream.rest_api.EndpointAction.action", "modulename": "pyxtream.rest_api", "qualname": "EndpointAction.action", "kind": "variable", "doc": "
\n"}, "pyxtream.rest_api.FlaskWrap": {"fullname": "pyxtream.rest_api.FlaskWrap", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap", "kind": "class", "doc": "A class that represents a thread of control.
\n\nThis class can be safely subclassed in a limited fashion. There are two ways\nto specify the activity: by passing a callable object to the constructor, or\nby overriding the run() method in a subclass.
\n", "bases": "threading.Thread"}, "pyxtream.rest_api.FlaskWrap.__init__": {"fullname": "pyxtream.rest_api.FlaskWrap.__init__", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.__init__", "kind": "function", "doc": "This constructor should always be called with keyword arguments. Arguments are:
\n\ngroup should be None; reserved for future extension when a ThreadGroup\nclass is implemented.
\n\ntarget is the callable object to be invoked by the run()\nmethod. Defaults to None, meaning nothing is called.
\n\nname is the thread name. By default, a unique name is constructed of\nthe form \"Thread-N\" where N is a small decimal number.
\n\nargs is a list or tuple of arguments for the target invocation. Defaults to ().
\n\nkwargs is a dictionary of keyword arguments for the target\ninvocation. Defaults to {}.
\n\nIf a subclass overrides the constructor, it must make sure to invoke\nthe base class constructor (Thread.__init__()) before doing anything\nelse to the thread.
\n", "signature": "(\tname , \txtream : object , \thtml_template_folder : str = '' , \thost : str = '0.0.0.0' , \tport : int = 5000 , \tdebug : bool = True ) "}, "pyxtream.rest_api.FlaskWrap.home_template": {"fullname": "pyxtream.rest_api.FlaskWrap.home_template", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.home_template", "kind": "variable", "doc": "
\n", "default_value": "'\\n<!DOCTYPE html><html lang="en"><head></head><body>pyxtream API</body></html>\\n '"}, "pyxtream.rest_api.FlaskWrap.host": {"fullname": "pyxtream.rest_api.FlaskWrap.host", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.host", "kind": "variable", "doc": "
\n", "annotation": ": str", "default_value": "''"}, "pyxtream.rest_api.FlaskWrap.port": {"fullname": "pyxtream.rest_api.FlaskWrap.port", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.port", "kind": "variable", "doc": "
\n", "annotation": ": int", "default_value": "0"}, "pyxtream.rest_api.FlaskWrap.debug": {"fullname": "pyxtream.rest_api.FlaskWrap.debug", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.debug", "kind": "variable", "doc": "
\n"}, "pyxtream.rest_api.FlaskWrap.app": {"fullname": "pyxtream.rest_api.FlaskWrap.app", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.app", "kind": "variable", "doc": "
\n"}, "pyxtream.rest_api.FlaskWrap.xt": {"fullname": "pyxtream.rest_api.FlaskWrap.xt", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.xt", "kind": "variable", "doc": "
\n"}, "pyxtream.rest_api.FlaskWrap.name": {"fullname": "pyxtream.rest_api.FlaskWrap.name", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.name", "kind": "variable", "doc": "A string used for identification purposes only.
\n\nIt has no semantics. Multiple threads may be given the same name. The\ninitial name is set by the constructor.
\n"}, "pyxtream.rest_api.FlaskWrap.daemon": {"fullname": "pyxtream.rest_api.FlaskWrap.daemon", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.daemon", "kind": "variable", "doc": "A boolean value indicating whether this thread is a daemon thread.
\n\nThis must be set before start() is called, otherwise RuntimeError is\nraised. Its initial value is inherited from the creating thread; the\nmain thread is not a daemon thread and therefore all threads created in\nthe main thread default to daemon = False.
\n\nThe entire Python program exits when only daemon threads are left.
\n"}, "pyxtream.rest_api.FlaskWrap.run": {"fullname": "pyxtream.rest_api.FlaskWrap.run", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.run", "kind": "function", "doc": "Method representing the thread's activity.
\n\nYou may override this method in a subclass. The standard run() method\ninvokes the callable object passed to the object's constructor as the\ntarget argument, if any, with sequential and keyword arguments taken\nfrom the args and kwargs arguments, respectively.
\n", "signature": "(self ): ", "funcdef": "def"}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"fullname": "pyxtream.rest_api.FlaskWrap.add_endpoint", "modulename": "pyxtream.rest_api", "qualname": "FlaskWrap.add_endpoint", "kind": "function", "doc": "
\n", "signature": "(self , endpoint = None , endpoint_name = None , handler = None ): ", "funcdef": "def"}, "pyxtream.schemaValidator": {"fullname": "pyxtream.schemaValidator", "modulename": "pyxtream.schemaValidator", "kind": "module", "doc": "
\n"}, "pyxtream.schemaValidator.SchemaType": {"fullname": "pyxtream.schemaValidator.SchemaType", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType", "kind": "class", "doc": "
\n", "bases": "enum.Enum"}, "pyxtream.schemaValidator.SchemaType.SERIES": {"fullname": "pyxtream.schemaValidator.SchemaType.SERIES", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType.SERIES", "kind": "variable", "doc": "
\n", "default_value": "<SchemaType.SERIES: 1>"}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"fullname": "pyxtream.schemaValidator.SchemaType.SERIES_INFO", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType.SERIES_INFO", "kind": "variable", "doc": "
\n", "default_value": "<SchemaType.SERIES_INFO: 2>"}, "pyxtream.schemaValidator.SchemaType.LIVE": {"fullname": "pyxtream.schemaValidator.SchemaType.LIVE", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType.LIVE", "kind": "variable", "doc": "
\n", "default_value": "<SchemaType.LIVE: 3>"}, "pyxtream.schemaValidator.SchemaType.VOD": {"fullname": "pyxtream.schemaValidator.SchemaType.VOD", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType.VOD", "kind": "variable", "doc": "
\n", "default_value": "<SchemaType.VOD: 4>"}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"fullname": "pyxtream.schemaValidator.SchemaType.CHANNEL", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType.CHANNEL", "kind": "variable", "doc": "
\n", "default_value": "<SchemaType.CHANNEL: 5>"}, "pyxtream.schemaValidator.SchemaType.GROUP": {"fullname": "pyxtream.schemaValidator.SchemaType.GROUP", "modulename": "pyxtream.schemaValidator", "qualname": "SchemaType.GROUP", "kind": "variable", "doc": "
\n", "default_value": "<SchemaType.GROUP: 6>"}, "pyxtream.schemaValidator.series_schema": {"fullname": "pyxtream.schemaValidator.series_schema", "modulename": "pyxtream.schemaValidator", "qualname": "series_schema", "kind": "variable", "doc": "
\n", "default_value": "{'$schema': 'https://json-schema.org/draft/2020-12/schema', '$id': 'https://example.com/product.schema.json', 'title': 'Series', 'description': 'xtream API Series Schema', 'type': 'object', 'properties': {'seasons': {'type': 'array', 'items': {'properties': {'air_date': {'type': 'string', 'format': 'date'}, 'episode_count': {'type': 'integer'}, 'id': {'type': 'integer'}, 'name': {'type': 'string'}, 'overview': {'type': 'string'}, 'season_number': {'type': 'integer'}, 'cover': {'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}, 'cover_big': {'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}}, 'required': ['id'], 'title': 'Season'}}, 'info': {'properties': {'name': {'type': 'string'}, 'cover': {'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}, 'plot': {'type': 'string'}, 'cast': {'type': 'string'}, 'director': {'type': 'string'}, 'genre': {'type': 'string'}, 'releaseDate': {'type': 'string', 'format': 'date'}, 'last_modified': {'type': 'string', 'format': 'integer'}, 'rating': {'type': 'string', 'format': 'integer'}, 'rating_5based': {'type': 'number'}, 'backdrop_path': {'type': 'array', 'items': {'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}}, 'youtube_trailed': {'type': 'string'}, 'episode_run_time': {'type': 'string', 'format': 'integer'}, 'category_id': {'type': 'string', 'format': 'integer'}}, 'required': ['name'], 'title': 'Info'}, 'episodes': {'patternProperties': {'^\\\\d+$': {'type': 'array', 'items': {'properties': {'id': {'type': 'string', 'format': 'integer'}, 'episode_num': {'type': 'integer'}, 'title': {'type': 'string'}, 'container_extension': {'type': 'string'}, 'info': {'type': 'object', 'items': {'plot': {'type': 'string'}}}, 'customer_sid': {'type': 'string'}, 'added': {'type': 'string', 'format': 'integer'}, 'season': {'type': 'integer'}, 'direct_source': {'type': 'string'}}}}}}}, 'required': ['info', 'seasons', 'episodes']}"}, "pyxtream.schemaValidator.series_info_schema": {"fullname": "pyxtream.schemaValidator.series_info_schema", "modulename": "pyxtream.schemaValidator", "qualname": "series_info_schema", "kind": "variable", "doc": "
\n", "default_value": "{'$schema': 'https://json-schema.org/draft/2020-12/schema', '$id': 'https://example.com/product.schema.json', 'title': 'Series', 'description': 'xtream API Series Info Schema', 'type': 'object', 'properties': {'name': {'type': 'string'}, 'cover': {'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}, 'plot': {'type': 'string'}, 'cast': {'type': 'string'}, 'director': {'type': 'string'}, 'genre': {'type': 'string'}, 'releaseDate': {'type': 'string', 'format': 'date'}, 'last_modified': {'type': 'string', 'format': 'integer'}, 'rating': {'type': 'string', 'format': 'integer'}, 'rating_5based': {'type': 'number'}, 'backdrop_path': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}}, {'type': 'string'}]}, 'youtube_trailed': {'type': 'string'}, 'episode_run_time': {'type': 'string', 'format': 'integer'}, 'category_id': {'type': 'string', 'format': 'integer'}}, 'required': ['name', 'category_id']}"}, "pyxtream.schemaValidator.live_schema": {"fullname": "pyxtream.schemaValidator.live_schema", "modulename": "pyxtream.schemaValidator", "qualname": "live_schema", "kind": "variable", "doc": "
\n", "default_value": "{'$schema': 'https://json-schema.org/draft/2020-12/schema', '$id': 'https://example.com/product.schema.json', 'title': 'Live', 'description': 'xtream API Live Schema', 'type': 'object', 'properties': {'num': {'type': 'integer'}, 'name': {'type': 'string'}, 'stream_type': {'type': 'string'}, 'stream_id': {'type': 'integer'}, 'stream_icon': {'anyOf': [{'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}, {'type': 'null'}]}, 'epg_channel_id': {'anyOf': [{'type': 'null'}, {'type': 'string'}]}, 'added': {'type': 'string', 'format': 'integer'}, 'is_adult': {'type': 'string', 'format': 'number'}, 'category_id': {'type': 'string'}, 'custom_sid': {'type': 'string'}, 'tv_archive': {'type': 'number'}, 'direct_source': {'type': 'string'}, 'tv_archive_duration': {'anyOf': [{'type': 'number'}, {'type': 'string', 'format': 'integer'}]}}}"}, "pyxtream.schemaValidator.vod_schema": {"fullname": "pyxtream.schemaValidator.vod_schema", "modulename": "pyxtream.schemaValidator", "qualname": "vod_schema", "kind": "variable", "doc": "
\n", "default_value": "{'$schema': 'https://json-schema.org/draft/2020-12/schema', '$id': 'https://example.com/product.schema.json', 'title': 'VOD', 'description': 'xtream API VOD Schema', 'type': 'object', 'properties': {'num': {'type': 'integer'}, 'name': {'type': 'string'}, 'stream_type': {'type': 'string'}, 'stream_id': {'type': 'integer'}, 'stream_icon': {'anyOf': [{'type': 'string', 'format': 'uri', 'qt-uri-protocols': ['http', 'https']}, {'type': 'null'}]}, 'rating': {'anyOf': [{'type': 'null'}, {'type': 'string', 'format': 'integer'}, {'type': 'number'}]}, 'rating_5based': {'type': 'number'}, 'added': {'type': 'string', 'format': 'integer'}, 'is_adult': {'type': 'string', 'format': 'number'}, 'category_id': {'type': 'string'}, 'container_extension': {'type': 'string'}, 'custom_sid': {'type': 'string'}, 'direct_source': {'type': 'string'}}}"}, "pyxtream.schemaValidator.channel_schema": {"fullname": "pyxtream.schemaValidator.channel_schema", "modulename": "pyxtream.schemaValidator", "qualname": "channel_schema", "kind": "variable", "doc": "
\n", "default_value": "{}"}, "pyxtream.schemaValidator.group_schema": {"fullname": "pyxtream.schemaValidator.group_schema", "modulename": "pyxtream.schemaValidator", "qualname": "group_schema", "kind": "variable", "doc": "
\n", "default_value": "{'$schema': 'https://json-schema.org/draft/2020-12/schema', '$id': 'https://example.com/product.schema.json', 'title': 'Group', 'description': 'xtream API Group Schema', 'type': 'object', 'properties': {'category_id': {'type': 'string'}, 'category_name': {'type': 'string'}, 'parent_id': {'type': 'integer'}}}"}, "pyxtream.schemaValidator.schemaValidator": {"fullname": "pyxtream.schemaValidator.schemaValidator", "modulename": "pyxtream.schemaValidator", "qualname": "schemaValidator", "kind": "function", "doc": "
\n", "signature": "(jsonData : Any , schemaType : pyxtream . schemaValidator . SchemaType ) -> bool : ", "funcdef": "def"}, "pyxtream.version": {"fullname": "pyxtream.version", "modulename": "pyxtream.version", "kind": "module", "doc": "
\n"}}, "docInfo": {"pyxtream": {"qualname": 0, "fullname": 1, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.api": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 5}, "pyxtream.api.get_live_categories_URL": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "pyxtream.api.get_live_streams_URL": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "pyxtream.api.get_live_streams_URL_by_category": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_vod_cat_URL": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "pyxtream.api.get_vod_streams_URL": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "pyxtream.api.get_vod_streams_URL_by_category": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_series_cat_URL": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "pyxtream.api.get_series_URL": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 19, "bases": 0, "doc": 3}, "pyxtream.api.get_series_URL_by_category": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_series_info_URL_by_ID": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_VOD_info_URL_by_ID": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_live_epg_URL_by_stream": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"qualname": 8, "fullname": 10, "annotation": 0, "default_value": 0, "signature": 30, "bases": 0, "doc": 3}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"qualname": 7, "fullname": 9, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.api.get_all_epg_URL": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 3}, "pyxtream.constants": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 8}, "pyxtream.constants.SSL_FIRST": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.SECONDS_IN_DAY": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.SECONDS_IN_YEAR": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.DEFAULT_FLASK_PORT": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.AUTH_MAX_ATTEMPTS": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.AUTH_TIMEOUT_SEC": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.REQUEST_MAX_ATTEMPTS": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.DOWNLOAD_TIMEOUT_SEC": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.KB_FACTOR": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.MB_FACTOR": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.DOWNLOAD_BLOCK_SIZE": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.REQUEST_BLOCK_SIZE": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 18}, "pyxtream.pyxtream.Channel": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 10}, "pyxtream.pyxtream.Channel.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.date_now": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.stream_type": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Channel.export_json": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 14}, "pyxtream.pyxtream.Group": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 11}, "pyxtream.pyxtream.Group.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 26, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.raw": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.channels": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.series": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.name": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.region_shortname": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Group.region_longname": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 11}, "pyxtream.pyxtream.Episode.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 37, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.raw": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.title": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.name": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.group_title": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.id": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.container_extension": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.episode_number": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.av_info": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.logo": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.logo_path": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Episode.url": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 8}, "pyxtream.pyxtream.Serie.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.raw": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.xtream": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.name": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.logo": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.logo_path": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.seasons": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.episodes": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.url": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Serie.export_json": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 10}, "pyxtream.pyxtream.Season": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 10}, "pyxtream.pyxtream.Season.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 9, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Season.name": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.Season.episodes": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 12}, "pyxtream.pyxtream.XTream.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 208, "bases": 0, "doc": 181}, "pyxtream.pyxtream.XTream.server": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.username": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.password": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.name": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.cache_path": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.hide_adult_content": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.validate_json": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.live_type": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.vod_type": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.series_type": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"qualname": 5, "fullname": 7, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.auth_data": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.authorization": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.groups": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.channels": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.series": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.movies": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.movies_30days": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.movies_7days": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.connection_headers": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.state": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.download_progress": {"qualname": 3, "fullname": 5, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.app_fullpath": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.html_template_folder": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.pyxtream.XTream.printx": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 49, "bases": 0, "doc": 63}, "pyxtream.pyxtream.XTream.get_download_progress": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 57}, "pyxtream.pyxtream.XTream.get_last_7days": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 28}, "pyxtream.pyxtream.XTream.get_last_30days": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 31}, "pyxtream.pyxtream.XTream.get_state": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 28}, "pyxtream.pyxtream.XTream.search_stream": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 141, "bases": 0, "doc": 111}, "pyxtream.pyxtream.XTream.download_video": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 25, "bases": 0, "doc": 69}, "pyxtream.pyxtream.XTream.authenticate": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 51}, "pyxtream.pyxtream.XTream.load_iptv": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 14, "bases": 0, "doc": 52}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 31}, "pyxtream.pyxtream.XTream.vodInfoByID": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 20}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 23}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 33}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 27}, "pyxtream.pyxtream.XTream.allEpg": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 11}, "pyxtream.rest_api": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 4}, "pyxtream.rest_api.EndpointAction": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.EndpointAction.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 15, "bases": 0, "doc": 3}, "pyxtream.rest_api.EndpointAction.response": {"qualname": 2, "fullname": 5, "annotation": 4, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.EndpointAction.function_name": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.EndpointAction.action": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap": {"qualname": 1, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 49}, "pyxtream.rest_api.FlaskWrap.__init__": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 105, "bases": 0, "doc": 151}, "pyxtream.rest_api.FlaskWrap.home_template": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 34, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap.host": {"qualname": 2, "fullname": 5, "annotation": 2, "default_value": 4, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap.port": {"qualname": 2, "fullname": 5, "annotation": 2, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap.debug": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap.app": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap.xt": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.rest_api.FlaskWrap.name": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 33}, "pyxtream.rest_api.FlaskWrap.daemon": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 73}, "pyxtream.rest_api.FlaskWrap.run": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 11, "bases": 0, "doc": 53}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 42, "bases": 0, "doc": 3}, "pyxtream.schemaValidator": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.SchemaType": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 3}, "pyxtream.schemaValidator.SchemaType.SERIES": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.SchemaType.LIVE": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.SchemaType.VOD": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.SchemaType.GROUP": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.series_schema": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 746, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.series_info_schema": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 354, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.live_schema": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 314, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.vod_schema": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 306, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.channel_schema": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 1, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.group_schema": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 92, "signature": 0, "bases": 0, "doc": 3}, "pyxtream.schemaValidator.schemaValidator": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 39, "bases": 0, "doc": 3}, "pyxtream.version": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}}, "length": 157, "save": true}, "index": {"qualname": {"root": {"3": {"0": {"docs": {"pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}}, "df": 1, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.movies_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}}, "df": 2}}}}}, "docs": {}, "df": 0}, "7": {"docs": {"pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}}, "df": 1, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.movies_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}}, "df": 2}}}}}, "docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 8, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 20}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.pyxtream.Group": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Group.raw": {"tf": 1}, "pyxtream.pyxtream.Group.channels": {"tf": 1}, "pyxtream.pyxtream.Group.series": {"tf": 1}, "pyxtream.pyxtream.Group.name": {"tf": 1}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1}, "pyxtream.pyxtream.Group.region_longname": {"tf": 1}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 15, "s": {"docs": {"pyxtream.pyxtream.XTream.groups": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}}, "df": 10, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.region_longname": {"tf": 1}}, "df": 1}}}}}}, "g": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream.Episode.logo": {"tf": 1}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1}, "pyxtream.pyxtream.Serie.logo": {"tf": 1}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1}}, "df": 4}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"tf": 1}}, "df": 4}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}}, "df": 4}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.cache_path": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.Channel": {"tf": 1}, "pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Channel.date_now": {"tf": 1}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}}, "df": 7, "s": {"docs": {"pyxtream.pyxtream.Group.channels": {"tf": 1}, "pyxtream.pyxtream.XTream.channels": {"tf": 1}}, "df": 2}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.Episode.container_extension": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.connection_headers": {"tf": 1}}, "df": 1}}}}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.Episode.url": {"tf": 1}, "pyxtream.pyxtream.Serie.url": {"tf": 1}}, "df": 17}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.username": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 5, "s": {"docs": {"pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}}, "df": 4}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.state": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Serie": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.raw": {"tf": 1}, "pyxtream.pyxtream.Serie.xtream": {"tf": 1}, "pyxtream.pyxtream.Serie.name": {"tf": 1}, "pyxtream.pyxtream.Serie.logo": {"tf": 1}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1}, "pyxtream.pyxtream.Serie.seasons": {"tf": 1}, "pyxtream.pyxtream.Serie.episodes": {"tf": 1}, "pyxtream.pyxtream.Serie.url": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}}, "df": 11, "s": {"docs": {"pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.Group.series": {"tf": 1}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 13}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.server": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {"pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"tf": 1}, "pyxtream.constants.AUTH_TIMEOUT_SEC": {"tf": 1}, "pyxtream.constants.DOWNLOAD_TIMEOUT_SEC": {"tf": 1}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}}, "df": 4, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.constants.SECONDS_IN_DAY": {"tf": 1}, "pyxtream.constants.SECONDS_IN_YEAR": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Season": {"tf": 1}, "pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.Season.name": {"tf": 1}, "pyxtream.pyxtream.Season.episodes": {"tf": 1}}, "df": 4, "s": {"docs": {"pyxtream.pyxtream.Serie.seasons": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.constants.SSL_FIRST": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.constants.DOWNLOAD_BLOCK_SIZE": {"tf": 1}, "pyxtream.constants.REQUEST_BLOCK_SIZE": {"tf": 1}}, "df": 2}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1}}, "df": 2}}}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 6, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.SchemaType": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}}, "df": 7}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.schemaValidator": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "b": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 9}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.constants.DOWNLOAD_BLOCK_SIZE": {"tf": 1}, "pyxtream.constants.REQUEST_BLOCK_SIZE": {"tf": 1}}, "df": 2}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 8, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.validate_json": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.constants.SECONDS_IN_DAY": {"tf": 1}, "pyxtream.constants.SECONDS_IN_YEAR": {"tf": 1}}, "df": 2, "f": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.Episode.av_info": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 6}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 8}}}, "d": {"docs": {"pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"tf": 1}, "pyxtream.pyxtream.Episode.id": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 5}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "v": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}}, "df": 4}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Episode": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.raw": {"tf": 1}, "pyxtream.pyxtream.Episode.title": {"tf": 1}, "pyxtream.pyxtream.Episode.name": {"tf": 1}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1}, "pyxtream.pyxtream.Episode.id": {"tf": 1}, "pyxtream.pyxtream.Episode.container_extension": {"tf": 1}, "pyxtream.pyxtream.Episode.episode_number": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.av_info": {"tf": 1}, "pyxtream.pyxtream.Episode.logo": {"tf": 1}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1}, "pyxtream.pyxtream.Episode.url": {"tf": 1}}, "df": 13, "s": {"docs": {"pyxtream.pyxtream.Serie.episodes": {"tf": 1}, "pyxtream.pyxtream.Season.episodes": {"tf": 1}}, "df": 2}}}}}}}, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"tf": 1}}, "df": 1}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}}, "df": 2}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Episode.container_extension": {"tf": 1}}, "df": 1}}}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.action": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}}, "df": 6, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.constants.AUTH_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.AUTH_TIMEOUT_SEC": {"tf": 1}, "pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"tf": 1}, "pyxtream.pyxtream.XTream.auth_data": {"tf": 1}}, "df": 4, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.authorization": {"tf": 1}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.constants.AUTH_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.REQUEST_MAX_ATTEMPTS": {"tf": 1}}, "df": 2}}}}}}}, "v": {"docs": {"pyxtream.pyxtream.Episode.av_info": {"tf": 1}}, "df": 1}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 1}}}, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 1}}, "p": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}}, "df": 2}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction.action": {"tf": 1}}, "df": 1}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.SSL_FIRST": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.constants.DEFAULT_FLASK_PORT": {"tf": 1}}, "df": 1, "w": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 12}}}}}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.constants.KB_FACTOR": {"tf": 1}, "pyxtream.constants.MB_FACTOR": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.constants.SECONDS_IN_DAY": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}}, "df": 2}}, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.date_now": {"tf": 1}}, "df": 1}, "a": {"docs": {"pyxtream.pyxtream.XTream.auth_data": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"tf": 1}, "pyxtream.constants.DEFAULT_FLASK_PORT": {"tf": 1}, "pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"tf": 1}}, "df": 3}}}}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.constants.DOWNLOAD_TIMEOUT_SEC": {"tf": 1}, "pyxtream.constants.DOWNLOAD_BLOCK_SIZE": {"tf": 1}, "pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 5}}}}}}}}, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.constants.SECONDS_IN_YEAR": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"tf": 1}}, "df": 1}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.REQUEST_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"tf": 1}, "pyxtream.constants.REQUEST_BLOCK_SIZE": {"tf": 1}}, "df": 3}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}}, "df": 2}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1}, "pyxtream.pyxtream.Group.region_longname": {"tf": 1}}, "df": 3}}}}, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.EndpointAction.response": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "w": {"docs": {"pyxtream.pyxtream.Group.raw": {"tf": 1}, "pyxtream.pyxtream.Episode.raw": {"tf": 1}, "pyxtream.pyxtream.Serie.raw": {"tf": 1}}, "df": 3}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"tf": 1}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.AUTH_TIMEOUT_SEC": {"tf": 1}, "pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"tf": 1}, "pyxtream.constants.DOWNLOAD_TIMEOUT_SEC": {"tf": 1}}, "df": 3}}}}}, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Episode.title": {"tf": 1}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1}}, "df": 2}}}}, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}}, "df": 3}}}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1}}, "df": 4}}}, "o": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 2}}}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.DEFAULT_FLASK_PORT": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.Episode.logo_path": {"tf": 1}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1}}, "df": 3}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.password": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "x": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "x": {"docs": {"pyxtream.constants.AUTH_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.REQUEST_MAX_ATTEMPTS": {"tf": 1}}, "df": 2}}, "b": {"docs": {"pyxtream.constants.MB_FACTOR": {"tf": 1}}, "df": 1}, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.pyxtream.XTream.movies": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_7days": {"tf": 1}}, "df": 5}}}}}}, "k": {"docs": {}, "df": 0, "b": {"docs": {"pyxtream.constants.KB_FACTOR": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"pyxtream.pyxtream.Channel.date_now": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.name": {"tf": 1}, "pyxtream.pyxtream.Episode.name": {"tf": 1}, "pyxtream.pyxtream.Serie.name": {"tf": 1}, "pyxtream.pyxtream.Season.name": {"tf": 1}, "pyxtream.pyxtream.XTream.name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 7}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.Episode.episode_number": {"tf": 1}}, "df": 1}}}}}}, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1}}, "df": 3}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.Serie.xtream": {"tf": 1}, "pyxtream.pyxtream.XTream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.server": {"tf": 1}, "pyxtream.pyxtream.XTream.username": {"tf": 1}, "pyxtream.pyxtream.XTream.password": {"tf": 1}, "pyxtream.pyxtream.XTream.name": {"tf": 1}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1}, "pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.auth_data": {"tf": 1}, "pyxtream.pyxtream.XTream.authorization": {"tf": 1}, "pyxtream.pyxtream.XTream.groups": {"tf": 1}, "pyxtream.pyxtream.XTream.channels": {"tf": 1}, "pyxtream.pyxtream.XTream.series": {"tf": 1}, "pyxtream.pyxtream.XTream.movies": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.connection_headers": {"tf": 1}, "pyxtream.pyxtream.XTream.state": {"tf": 1}, "pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1}, "pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 45}}}}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.connection_headers": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.host": {"tf": 1}}, "df": 1}}}}}}, "fullname": {"root": {"3": {"0": {"docs": {"pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}}, "df": 1, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.movies_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}}, "df": 2}}}}}, "docs": {}, "df": 0}, "7": {"docs": {"pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}}, "df": 1, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.movies_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}}, "df": 2}}}}}, "docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 8, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream": {"tf": 1}, "pyxtream.api": {"tf": 1}, "pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.constants": {"tf": 1}, "pyxtream.constants.SSL_FIRST": {"tf": 1}, "pyxtream.constants.SECONDS_IN_DAY": {"tf": 1}, "pyxtream.constants.SECONDS_IN_YEAR": {"tf": 1}, "pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"tf": 1}, "pyxtream.constants.DEFAULT_FLASK_PORT": {"tf": 1}, "pyxtream.constants.AUTH_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.AUTH_TIMEOUT_SEC": {"tf": 1}, "pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"tf": 1}, "pyxtream.constants.REQUEST_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"tf": 1}, "pyxtream.constants.DOWNLOAD_TIMEOUT_SEC": {"tf": 1}, "pyxtream.constants.KB_FACTOR": {"tf": 1}, "pyxtream.constants.MB_FACTOR": {"tf": 1}, "pyxtream.constants.DOWNLOAD_BLOCK_SIZE": {"tf": 1}, "pyxtream.constants.REQUEST_BLOCK_SIZE": {"tf": 1}, "pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.pyxtream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.date_now": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Channel.export_json": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.raw": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.channels": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.series": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Group.region_longname": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.raw": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.title": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.container_extension": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.episode_number": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.av_info": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.logo": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.url": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.raw": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.xtream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.logo": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.seasons": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.episodes": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.url": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Season": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Season.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Season.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Season.episodes": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.server": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.username": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.password": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.name": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.auth_data": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.authorization": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.groups": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.channels": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.series": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.movies": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.movies_30days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.movies_7days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.connection_headers": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.state": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_progress": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.printx": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1.4142135623730951}, "pyxtream.rest_api": {"tf": 1}, "pyxtream.rest_api.EndpointAction": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.action": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}, "pyxtream.schemaValidator": {"tf": 1}, "pyxtream.schemaValidator.SchemaType": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}, "pyxtream.schemaValidator.schemaValidator": {"tf": 1}, "pyxtream.version": {"tf": 1}}, "df": 157}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.DEFAULT_FLASK_PORT": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.Episode.logo_path": {"tf": 1}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1}}, "df": 3}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.password": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "x": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {"pyxtream.api": {"tf": 1}, "pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.rest_api": {"tf": 1}, "pyxtream.rest_api.EndpointAction": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.action": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 34}, "p": {"docs": {"pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}}, "df": 2}}, "n": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}}, "df": 6, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.constants.AUTH_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.AUTH_TIMEOUT_SEC": {"tf": 1}, "pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"tf": 1}, "pyxtream.pyxtream.XTream.auth_data": {"tf": 1}}, "df": 4, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.authorization": {"tf": 1}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.constants.AUTH_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.REQUEST_MAX_ATTEMPTS": {"tf": 1}}, "df": 2}}}}}}}, "v": {"docs": {"pyxtream.pyxtream.Episode.av_info": {"tf": 1}}, "df": 1}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 1}}}, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 1}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction.action": {"tf": 1}}, "df": 1}}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 20}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.pyxtream.Group": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Group.raw": {"tf": 1}, "pyxtream.pyxtream.Group.channels": {"tf": 1}, "pyxtream.pyxtream.Group.series": {"tf": 1}, "pyxtream.pyxtream.Group.name": {"tf": 1}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1}, "pyxtream.pyxtream.Group.region_longname": {"tf": 1}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 15, "s": {"docs": {"pyxtream.pyxtream.XTream.groups": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}}, "df": 10, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.region_longname": {"tf": 1}}, "df": 1}}}}}}, "g": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream.Episode.logo": {"tf": 1}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1}, "pyxtream.pyxtream.Serie.logo": {"tf": 1}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1}}, "df": 4}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"tf": 1}}, "df": 4}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}}, "df": 4}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.cache_path": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.constants": {"tf": 1}, "pyxtream.constants.SSL_FIRST": {"tf": 1}, "pyxtream.constants.SECONDS_IN_DAY": {"tf": 1}, "pyxtream.constants.SECONDS_IN_YEAR": {"tf": 1}, "pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"tf": 1}, "pyxtream.constants.DEFAULT_FLASK_PORT": {"tf": 1}, "pyxtream.constants.AUTH_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.AUTH_TIMEOUT_SEC": {"tf": 1}, "pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"tf": 1}, "pyxtream.constants.REQUEST_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"tf": 1}, "pyxtream.constants.DOWNLOAD_TIMEOUT_SEC": {"tf": 1}, "pyxtream.constants.KB_FACTOR": {"tf": 1}, "pyxtream.constants.MB_FACTOR": {"tf": 1}, "pyxtream.constants.DOWNLOAD_BLOCK_SIZE": {"tf": 1}, "pyxtream.constants.REQUEST_BLOCK_SIZE": {"tf": 1}, "pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}}, "df": 19}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.Episode.container_extension": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.connection_headers": {"tf": 1}}, "df": 1}}}}}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.Channel": {"tf": 1}, "pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Channel.date_now": {"tf": 1}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}}, "df": 7, "s": {"docs": {"pyxtream.pyxtream.Group.channels": {"tf": 1}, "pyxtream.pyxtream.XTream.channels": {"tf": 1}}, "df": 2}}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.Episode.url": {"tf": 1}, "pyxtream.pyxtream.Serie.url": {"tf": 1}}, "df": 17}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.username": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 5, "s": {"docs": {"pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}}, "df": 4}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.state": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Serie": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.raw": {"tf": 1}, "pyxtream.pyxtream.Serie.xtream": {"tf": 1}, "pyxtream.pyxtream.Serie.name": {"tf": 1}, "pyxtream.pyxtream.Serie.logo": {"tf": 1}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1}, "pyxtream.pyxtream.Serie.seasons": {"tf": 1}, "pyxtream.pyxtream.Serie.episodes": {"tf": 1}, "pyxtream.pyxtream.Serie.url": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}}, "df": 11, "s": {"docs": {"pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.Group.series": {"tf": 1}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 13}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.server": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {"pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"tf": 1}, "pyxtream.constants.AUTH_TIMEOUT_SEC": {"tf": 1}, "pyxtream.constants.DOWNLOAD_TIMEOUT_SEC": {"tf": 1}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}}, "df": 4, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.constants.SECONDS_IN_DAY": {"tf": 1}, "pyxtream.constants.SECONDS_IN_YEAR": {"tf": 1}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Season": {"tf": 1}, "pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.Season.name": {"tf": 1}, "pyxtream.pyxtream.Season.episodes": {"tf": 1}}, "df": 4, "s": {"docs": {"pyxtream.pyxtream.Serie.seasons": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.constants.SSL_FIRST": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.constants.DOWNLOAD_BLOCK_SIZE": {"tf": 1}, "pyxtream.constants.REQUEST_BLOCK_SIZE": {"tf": 1}}, "df": 2}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1}}, "df": 2}}}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 6, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator": {"tf": 1}, "pyxtream.schemaValidator.SchemaType": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}, "pyxtream.schemaValidator.schemaValidator": {"tf": 1.4142135623730951}}, "df": 15}}}}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.SchemaType": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}}, "df": 7}}}}}}}}}}, "b": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 9}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.constants.DOWNLOAD_BLOCK_SIZE": {"tf": 1}, "pyxtream.constants.REQUEST_BLOCK_SIZE": {"tf": 1}}, "df": 2}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 8, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.validate_json": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.version": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.constants.SECONDS_IN_DAY": {"tf": 1}, "pyxtream.constants.SECONDS_IN_YEAR": {"tf": 1}}, "df": 2, "f": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.Episode.av_info": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 6}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 8}}}, "d": {"docs": {"pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"tf": 1}, "pyxtream.pyxtream.Episode.id": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 5}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "v": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}}, "df": 4}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Episode": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.raw": {"tf": 1}, "pyxtream.pyxtream.Episode.title": {"tf": 1}, "pyxtream.pyxtream.Episode.name": {"tf": 1}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1}, "pyxtream.pyxtream.Episode.id": {"tf": 1}, "pyxtream.pyxtream.Episode.container_extension": {"tf": 1}, "pyxtream.pyxtream.Episode.episode_number": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Episode.av_info": {"tf": 1}, "pyxtream.pyxtream.Episode.logo": {"tf": 1}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1}, "pyxtream.pyxtream.Episode.url": {"tf": 1}}, "df": 13, "s": {"docs": {"pyxtream.pyxtream.Serie.episodes": {"tf": 1}, "pyxtream.pyxtream.Season.episodes": {"tf": 1}}, "df": 2}}}}}}}, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"tf": 1}}, "df": 1}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}}, "df": 2}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Episode.container_extension": {"tf": 1}}, "df": 1}}}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.action": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.SSL_FIRST": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.constants.DEFAULT_FLASK_PORT": {"tf": 1}}, "df": 1, "w": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 12}}}}}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.constants.KB_FACTOR": {"tf": 1}, "pyxtream.constants.MB_FACTOR": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.constants.SECONDS_IN_DAY": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}}, "df": 2}}, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.date_now": {"tf": 1}}, "df": 1}, "a": {"docs": {"pyxtream.pyxtream.XTream.auth_data": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"tf": 1}, "pyxtream.constants.DEFAULT_FLASK_PORT": {"tf": 1}, "pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"tf": 1}}, "df": 3}}}}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.constants.DOWNLOAD_TIMEOUT_SEC": {"tf": 1}, "pyxtream.constants.DOWNLOAD_BLOCK_SIZE": {"tf": 1}, "pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 5}}}}}}}}, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.constants.SECONDS_IN_YEAR": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"tf": 1}}, "df": 1}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.REQUEST_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"tf": 1}, "pyxtream.constants.REQUEST_BLOCK_SIZE": {"tf": 1}}, "df": 3}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}}, "df": 2}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1}, "pyxtream.pyxtream.Group.region_longname": {"tf": 1}}, "df": 3}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api": {"tf": 1}, "pyxtream.rest_api.EndpointAction": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.action": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.debug": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 18}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.EndpointAction.response": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "w": {"docs": {"pyxtream.pyxtream.Group.raw": {"tf": 1}, "pyxtream.pyxtream.Episode.raw": {"tf": 1}, "pyxtream.pyxtream.Serie.raw": {"tf": 1}}, "df": 3}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"tf": 1}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}}, "df": 2, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.constants.AUTH_TIMEOUT_SEC": {"tf": 1}, "pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"tf": 1}, "pyxtream.constants.DOWNLOAD_TIMEOUT_SEC": {"tf": 1}}, "df": 3}}}}}, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Episode.title": {"tf": 1}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1}}, "df": 2}}}}, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}}, "df": 3}}}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.stream_type": {"tf": 1}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1}}, "df": 4}}}, "o": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 2}}}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "x": {"docs": {"pyxtream.constants.AUTH_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.REQUEST_MAX_ATTEMPTS": {"tf": 1}}, "df": 2}}, "b": {"docs": {"pyxtream.constants.MB_FACTOR": {"tf": 1}}, "df": 1}, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}, "pyxtream.pyxtream.XTream.movies": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_7days": {"tf": 1}}, "df": 5}}}}}}, "k": {"docs": {}, "df": 0, "b": {"docs": {"pyxtream.constants.KB_FACTOR": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"pyxtream.pyxtream.Channel.date_now": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.name": {"tf": 1}, "pyxtream.pyxtream.Episode.name": {"tf": 1}, "pyxtream.pyxtream.Serie.name": {"tf": 1}, "pyxtream.pyxtream.Season.name": {"tf": 1}, "pyxtream.pyxtream.XTream.name": {"tf": 1}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 7}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.Episode.episode_number": {"tf": 1}}, "df": 1}}}}}}, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1}}, "df": 3}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.xt": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.Serie.xtream": {"tf": 1}, "pyxtream.pyxtream.XTream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.server": {"tf": 1}, "pyxtream.pyxtream.XTream.username": {"tf": 1}, "pyxtream.pyxtream.XTream.password": {"tf": 1}, "pyxtream.pyxtream.XTream.name": {"tf": 1}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1}, "pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1}, "pyxtream.pyxtream.XTream.auth_data": {"tf": 1}, "pyxtream.pyxtream.XTream.authorization": {"tf": 1}, "pyxtream.pyxtream.XTream.groups": {"tf": 1}, "pyxtream.pyxtream.XTream.channels": {"tf": 1}, "pyxtream.pyxtream.XTream.series": {"tf": 1}, "pyxtream.pyxtream.XTream.movies": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.movies_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.connection_headers": {"tf": 1}, "pyxtream.pyxtream.XTream.state": {"tf": 1}, "pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1}, "pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 45}}}}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.connection_headers": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.host": {"tf": 1}}, "df": 1}}}}}}, "annotation": {"root": {"docs": {"pyxtream.pyxtream.XTream.download_progress": {"tf": 1}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1}}, "df": 4, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.download_progress": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.rest_api.EndpointAction.response": {"tf": 1}}, "df": 1}}}}}, "w": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.EndpointAction.response": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.EndpointAction.response": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.rest_api.FlaskWrap.host": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.port": {"tf": 1}}, "df": 1}}}}}, "default_value": {"root": {"0": {"docs": {"pyxtream.rest_api.FlaskWrap.port": {"tf": 1}}, "df": 1}, "1": {"0": {"2": {"4": {"docs": {"pyxtream.constants.KB_FACTOR": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "4": {"8": {"5": {"7": {"6": {"docs": {"pyxtream.constants.MB_FACTOR": {"tf": 1}, "pyxtream.constants.REQUEST_BLOCK_SIZE": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"pyxtream.constants.REQUEST_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.constants.DOWNLOAD_TIMEOUT_SEC": {"tf": 1}}, "df": 2}, "2": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}}}, "5": {"docs": {"pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"tf": 1}}, "df": 1}, "docs": {"pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}}, "df": 1}, "2": {"8": {"8": {"0": {"0": {"docs": {"pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}}, "df": 2}, "3": {"1": {"5": {"3": {"6": {"0": {"0": {"0": {"docs": {"pyxtream.constants.SECONDS_IN_YEAR": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"tf": 1}, "pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1}}, "df": 2}, "docs": {"pyxtream.constants.AUTH_MAX_ATTEMPTS": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}}, "df": 2}, "4": {"1": {"9": {"4": {"3": {"0": {"4": {"docs": {"pyxtream.constants.DOWNLOAD_BLOCK_SIZE": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"pyxtream.constants.AUTH_TIMEOUT_SEC": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}}, "df": 2}, "5": {"0": {"0": {"0": {"docs": {"pyxtream.constants.DEFAULT_FLASK_PORT": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}}, "df": 1, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 3}}}}}}, "6": {"docs": {"pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}}, "df": 1}, "7": {"docs": {"pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1}}, "df": 1}, "8": {"6": {"4": {"0": {"0": {"docs": {"pyxtream.constants.SECONDS_IN_DAY": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "9": {"9": {"9": {"9": {"docs": {"pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_schema": {"tf": 13.96424004376894}, "pyxtream.schemaValidator.series_info_schema": {"tf": 9.273618495495704}, "pyxtream.schemaValidator.live_schema": {"tf": 9}, "pyxtream.schemaValidator.vod_schema": {"tf": 8.888194417315589}, "pyxtream.schemaValidator.channel_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 4.47213595499958}}, "df": 15, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.constants.SSL_FIRST": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 6}, "pyxtream.schemaValidator.series_info_schema": {"tf": 4.123105625617661}, "pyxtream.schemaValidator.live_schema": {"tf": 4.242640687119285}, "pyxtream.schemaValidator.vod_schema": {"tf": 4.242640687119285}, "pyxtream.schemaValidator.group_schema": {"tf": 2}}, "df": 5}}}, "v": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1.4142135623730951}}, "df": 1}}, "x": {"2": {"7": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_schema": {"tf": 18.601075237738275}, "pyxtream.schemaValidator.series_info_schema": {"tf": 12.806248474865697}, "pyxtream.schemaValidator.live_schema": {"tf": 11.832159566199232}, "pyxtream.schemaValidator.vod_schema": {"tf": 11.74734012447073}, "pyxtream.schemaValidator.group_schema": {"tf": 6.324555320336759}}, "df": 7}, "docs": {}, "df": 0}, "docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.4142135623730951}}, "df": 1, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 3, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.7320508075688772}}, "df": 4}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.4142135623730951}}, "df": 2}}}}, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 2.6457513110645907}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}}, "df": 7}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1.4142135623730951}}, "df": 2}}}}, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 3, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.7320508075688772}}, "df": 1}}, "t": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 4, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 4, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.4142135623730951}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 2.6457513110645907}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}}, "df": 7}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1.4142135623730951}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.4142135623730951}}, "df": 1}}}, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 4}}, "e": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 1}, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "g": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1}}, "df": 1}}, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 2}}}}}}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.4142135623730951}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 4}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {"pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 6}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1}}, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 3}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 2}}}}, "n": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "f": {"docs": {"pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.4142135623730951}}, "df": 3}}}}}, "s": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 2}, "pyxtream.schemaValidator.live_schema": {"tf": 2}, "pyxtream.schemaValidator.vod_schema": {"tf": 2}, "pyxtream.schemaValidator.group_schema": {"tf": 2}}, "df": 5, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1}}, "df": 6}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}}, "df": 4}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}}, "df": 1, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 5}, "pyxtream.schemaValidator.series_info_schema": {"tf": 3.7416573867739413}, "pyxtream.schemaValidator.live_schema": {"tf": 3.1622776601683795}, "pyxtream.schemaValidator.vod_schema": {"tf": 3.1622776601683795}, "pyxtream.schemaValidator.group_schema": {"tf": 1.4142135623730951}}, "df": 5}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.7320508075688772}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 3}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 3}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1}, "pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 3}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 3.3166247903554}, "pyxtream.schemaValidator.series_info_schema": {"tf": 2}, "pyxtream.schemaValidator.live_schema": {"tf": 2}, "pyxtream.schemaValidator.vod_schema": {"tf": 2}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2.23606797749979}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.live_schema": {"tf": 2}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.group_schema": {"tf": 1.7320508075688772}}, "df": 5}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 2}}}, "s": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 2}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.4142135623730951}}, "df": 2}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}}, "df": 2}}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 2}}}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1.4142135623730951}}, "df": 5}}}}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1}}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "/": {"2": {"0": {"2": {"0": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}}}}}}}, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "w": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}}, "df": 1}}}}}}}}, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}, "pyxtream.schemaValidator.live_schema": {"tf": 1}, "pyxtream.schemaValidator.vod_schema": {"tf": 1}, "pyxtream.schemaValidator.group_schema": {"tf": 1}}, "df": 5}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 3.4641016151377544}, "pyxtream.schemaValidator.series_info_schema": {"tf": 2.6457513110645907}, "pyxtream.schemaValidator.live_schema": {"tf": 2}, "pyxtream.schemaValidator.vod_schema": {"tf": 2}}, "df": 4}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 2.8284271247461903}, "pyxtream.schemaValidator.series_info_schema": {"tf": 2}, "pyxtream.schemaValidator.live_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.4142135623730951}}, "df": 4}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.4142135623730951}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.4142135623730951}}, "df": 3}}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}}}, "y": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.series_schema": {"tf": 1}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1}}, "df": 2}}}}}}}}}, "signature": {"root": {"0": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2}}, "df": 1}, "2": {"8": {"8": {"0": {"0": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "3": {"9": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.printx": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 2.8284271247461903}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2}}, "df": 4}, "docs": {}, "df": 0}, "5": {"0": {"0": {"0": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {}, "df": 0}, "docs": {"pyxtream.api.get_live_categories_URL": {"tf": 4}, "pyxtream.api.get_live_streams_URL": {"tf": 4}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 4.47213595499958}, "pyxtream.api.get_vod_cat_URL": {"tf": 4}, "pyxtream.api.get_vod_streams_URL": {"tf": 4}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 4.47213595499958}, "pyxtream.api.get_series_cat_URL": {"tf": 4}, "pyxtream.api.get_series_URL": {"tf": 4}, "pyxtream.api.get_series_URL_by_category": {"tf": 4.47213595499958}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 4.47213595499958}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 4.47213595499958}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 4.47213595499958}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 4.898979485566356}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 4.47213595499958}, "pyxtream.api.get_all_epg_URL": {"tf": 5.656854249492381}, "pyxtream.pyxtream.Channel.__init__": {"tf": 4.898979485566356}, "pyxtream.pyxtream.Channel.export_json": {"tf": 3.1622776601683795}, "pyxtream.pyxtream.Group.__init__": {"tf": 4.47213595499958}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 3.7416573867739413}, "pyxtream.pyxtream.Episode.__init__": {"tf": 5.291502622129181}, "pyxtream.pyxtream.Serie.__init__": {"tf": 4.47213595499958}, "pyxtream.pyxtream.Serie.export_json": {"tf": 3.1622776601683795}, "pyxtream.pyxtream.Season.__init__": {"tf": 2.8284271247461903}, "pyxtream.pyxtream.XTream.__init__": {"tf": 12.767145334803704}, "pyxtream.pyxtream.XTream.printx": {"tf": 6.324555320336759}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 4.898979485566356}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 3.1622776601683795}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 3.1622776601683795}, "pyxtream.pyxtream.XTream.get_state": {"tf": 3.1622776601683795}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 10.488088481701515}, "pyxtream.pyxtream.XTream.download_video": {"tf": 4.47213595499958}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 3.1622776601683795}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 3.4641016151377544}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 4.242640687119285}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 3.7416573867739413}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 3.7416573867739413}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 4.242640687119285}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 3.7416573867739413}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 3.1622776601683795}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 3.4641016151377544}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 9.055385138137417}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 3.1622776601683795}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 5.830951894845301}, "pyxtream.schemaValidator.schemaValidator": {"tf": 5.656854249492381}}, "df": 44, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL": {"tf": 1}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_cat_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_cat_URL": {"tf": 1}, "pyxtream.api.get_series_URL": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_all_epg_URL": {"tf": 1}}, "df": 15}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.schemaValidator.schemaValidator": {"tf": 1}}, "df": 5}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.api.get_live_categories_URL": {"tf": 1.4142135623730951}, "pyxtream.api.get_live_streams_URL": {"tf": 1.4142135623730951}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1.4142135623730951}, "pyxtream.api.get_vod_cat_URL": {"tf": 1.4142135623730951}, "pyxtream.api.get_vod_streams_URL": {"tf": 1.4142135623730951}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1.4142135623730951}, "pyxtream.api.get_series_cat_URL": {"tf": 1.4142135623730951}, "pyxtream.api.get_series_URL": {"tf": 1.4142135623730951}, "pyxtream.api.get_series_URL_by_category": {"tf": 1.4142135623730951}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1.4142135623730951}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1.4142135623730951}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1.4142135623730951}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1.4142135623730951}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1.4142135623730951}, "pyxtream.api.get_all_epg_URL": {"tf": 2}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 2.23606797749979}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}}, "df": 21, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 11}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 5}}}}, "l": {"docs": {}, "df": 0, "f": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 20}}, "c": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1}}, "df": 1}}}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.schemaValidator.schemaValidator": {"tf": 1.4142135623730951}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.schemaValidator.schemaValidator": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}}, "df": 3}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_live_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_URL_by_category": {"tf": 1}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 14}, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}}, "df": 4}}, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 4}}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}}, "df": 2}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.7320508075688772}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 2}}}}}}}, "r": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.api.get_all_epg_URL": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 2}}}, "y": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.schemaValidator.schemaValidator": {"tf": 1}}, "df": 1}}}}}}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 4}}}}}}, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 4}}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}}, "df": 2}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 4}}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.Channel.__init__": {"tf": 1}, "pyxtream.pyxtream.Group.__init__": {"tf": 1}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 6}}}, "e": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 2}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Episode.__init__": {"tf": 1}}, "df": 1}}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "n": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Season.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 5}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1.7320508075688772}}, "df": 3}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.schemaValidator.schemaValidator": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.EndpointAction.__init__": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.schemaValidator.schemaValidator": {"tf": 1}}, "df": 1}}}}}}}}, "m": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}}}}, "bases": {"root": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.schemaValidator.SchemaType": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "doc": {"root": {"3": {"0": {"docs": {"pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "7": {"docs": {"pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}}, "df": 1}, "docs": {"pyxtream": {"tf": 1.7320508075688772}, "pyxtream.api": {"tf": 1.4142135623730951}, "pyxtream.api.get_live_categories_URL": {"tf": 1.7320508075688772}, "pyxtream.api.get_live_streams_URL": {"tf": 1.7320508075688772}, "pyxtream.api.get_live_streams_URL_by_category": {"tf": 1.7320508075688772}, "pyxtream.api.get_vod_cat_URL": {"tf": 1.7320508075688772}, "pyxtream.api.get_vod_streams_URL": {"tf": 1.7320508075688772}, "pyxtream.api.get_vod_streams_URL_by_category": {"tf": 1.7320508075688772}, "pyxtream.api.get_series_cat_URL": {"tf": 1.7320508075688772}, "pyxtream.api.get_series_URL": {"tf": 1.7320508075688772}, "pyxtream.api.get_series_URL_by_category": {"tf": 1.7320508075688772}, "pyxtream.api.get_series_info_URL_by_ID": {"tf": 1.7320508075688772}, "pyxtream.api.get_VOD_info_URL_by_ID": {"tf": 1.7320508075688772}, "pyxtream.api.get_live_epg_URL_by_stream": {"tf": 1.7320508075688772}, "pyxtream.api.get_live_epg_URL_by_stream_and_limit": {"tf": 1.7320508075688772}, "pyxtream.api.get_all_live_epg_URL_by_stream": {"tf": 1.7320508075688772}, "pyxtream.api.get_all_epg_URL": {"tf": 1.7320508075688772}, "pyxtream.constants": {"tf": 1.4142135623730951}, "pyxtream.constants.SSL_FIRST": {"tf": 1.7320508075688772}, "pyxtream.constants.SECONDS_IN_DAY": {"tf": 1.7320508075688772}, "pyxtream.constants.SECONDS_IN_YEAR": {"tf": 1.7320508075688772}, "pyxtream.constants.DEFAULT_RELOAD_TIME_SEC": {"tf": 1.7320508075688772}, "pyxtream.constants.DEFAULT_FLASK_PORT": {"tf": 1.7320508075688772}, "pyxtream.constants.AUTH_MAX_ATTEMPTS": {"tf": 1.7320508075688772}, "pyxtream.constants.AUTH_TIMEOUT_SEC": {"tf": 1.7320508075688772}, "pyxtream.constants.AUTH_LOOP_EXIT_VALUE": {"tf": 1.7320508075688772}, "pyxtream.constants.REQUEST_MAX_ATTEMPTS": {"tf": 1.7320508075688772}, "pyxtream.constants.REQUEST_DEFAULT_TIMEOUT": {"tf": 1.7320508075688772}, "pyxtream.constants.DOWNLOAD_TIMEOUT_SEC": {"tf": 1.7320508075688772}, "pyxtream.constants.KB_FACTOR": {"tf": 1.7320508075688772}, "pyxtream.constants.MB_FACTOR": {"tf": 1.7320508075688772}, "pyxtream.constants.DOWNLOAD_BLOCK_SIZE": {"tf": 1.7320508075688772}, "pyxtream.constants.REQUEST_BLOCK_SIZE": {"tf": 1.7320508075688772}, "pyxtream.constants.CATCH_ALL_CATEGORY_ID": {"tf": 1.7320508075688772}, "pyxtream.constants.MOVIES_RECENT_30_DAYS_THRESHOLD": {"tf": 1.7320508075688772}, "pyxtream.constants.MOVIES_RECENT_7_DAYS_THRESHOLD": {"tf": 1.7320508075688772}, "pyxtream.pyxtream": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.date_now": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.stream_type": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Channel.export_json": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.convert_region_shortname_to_fullname": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.raw": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.channels": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.series": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.name": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.region_shortname": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Group.region_longname": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.raw": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.title": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.name": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.group_title": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.id": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.container_extension": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.episode_number": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.av_info": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.logo": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.logo_path": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Episode.url": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.raw": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.xtream": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.name": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.logo": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.logo_path": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.seasons": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.episodes": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.url": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Season": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Season.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Season.name": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.Season.episodes": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.__init__": {"tf": 4.69041575982343}, "pyxtream.pyxtream.XTream.server": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.username": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.password": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.name": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.cache_path": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.hide_adult_content": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.threshold_time_sec": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.validate_json": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.live_type": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.vod_type": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.series_type": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.live_catch_all_group": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.vod_catch_all_group": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.series_catch_all_group": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.auth_data": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.authorization": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.groups": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.channels": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.series": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.movies": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.movies_30days": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.movies_7days": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.connection_headers": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.state": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.download_progress": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.app_fullpath": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.html_template_folder": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.printx": {"tf": 3.4641016151377544}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 3.605551275463989}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 2.449489742783178}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 2.449489742783178}, "pyxtream.pyxtream.XTream.get_state": {"tf": 2.449489742783178}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 4.123105625617661}, "pyxtream.pyxtream.XTream.download_video": {"tf": 3.605551275463989}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 3}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 3}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 2.6457513110645907}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 2.6457513110645907}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 2.6457513110645907}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 2.8284271247461903}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 2.6457513110645907}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1.7320508075688772}, "pyxtream.rest_api": {"tf": 1.4142135623730951}, "pyxtream.rest_api.EndpointAction": {"tf": 1.7320508075688772}, "pyxtream.rest_api.EndpointAction.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api.EndpointAction.response": {"tf": 1.7320508075688772}, "pyxtream.rest_api.EndpointAction.function_name": {"tf": 1.7320508075688772}, "pyxtream.rest_api.EndpointAction.action": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 5.5677643628300215}, "pyxtream.rest_api.FlaskWrap.home_template": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.host": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.port": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.debug": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.app": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.xt": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 3}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.add_endpoint": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType.SERIES": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType.SERIES_INFO": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType.LIVE": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType.VOD": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType.CHANNEL": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.SchemaType.GROUP": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.series_info_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.live_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.vod_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.channel_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.group_schema": {"tf": 1.7320508075688772}, "pyxtream.schemaValidator.schemaValidator": {"tf": 1.7320508075688772}, "pyxtream.version": {"tf": 1.7320508075688772}}, "df": 157, "a": {"docs": {"pyxtream.pyxtream.Channel": {"tf": 1}, "pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Group": {"tf": 1}, "pyxtream.pyxtream.Episode": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.Serie": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}, "pyxtream.pyxtream.Season": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 2.23606797749979}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 24, "p": {"docs": {}, "df": 0, "i": {"docs": {"pyxtream.api": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1.4142135623730951}, "pyxtream.rest_api": {"tf": 1}}, "df": 4}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}}}}, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 2, "d": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 2}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1.4142135623730951}}, "df": 10}, "y": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 3}}}, "e": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1, "d": {"docs": {"pyxtream.pyxtream.XTream.get_state": {"tf": 1}}, "df": 1}}}}}}}}}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 12}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1.4142135623730951}}, "df": 2}}}}}}}, "e": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 3}}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 3}}}}, "g": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}, "f": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 2}}}}, "s": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 5}, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 2}}}}}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 2}}}}}}}, "b": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 4}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 2}}}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.api": {"tf": 1}, "pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 3, "s": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1.4142135623730951}}, "df": 1}}}, "p": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 2}}}}}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.api": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 3}}}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 4, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 6, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2}}}}}, "y": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 5, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.constants": {"tf": 1}}, "df": 1}}}}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.constants": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": null}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": null}, "pyxtream.rest_api.FlaskWrap.name": {"tf": null}, "pyxtream.rest_api.FlaskWrap.run": {"tf": null}}, "df": 4}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}}, "df": 2}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.XTream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 3}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 1, "d": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Serie": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 2, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.Group": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 3}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.Group": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 3}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 1}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2}}}}, "n": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 2}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}}, "df": 3}}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}}, "df": 3, "l": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}}, "df": 1}}}}}}}}, "y": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.constants": {"tf": 1}, "pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.XTream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 2.449489742783178}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 14, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}}, "m": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 1, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}}, "df": 3}}}}}}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}}, "df": 1}}, "n": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2}}, "l": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 2}}}}}, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "k": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2.449489742783178}}, "df": 1}}, "g": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.get_state": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1.4142135623730951}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 3}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 6, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.constants": {"tf": 1}, "pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 2.449489742783178}, "pyxtream.pyxtream.XTream.printx": {"tf": 2.449489742783178}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 2}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 2.23606797749979}, "pyxtream.pyxtream.XTream.download_video": {"tf": 2.449489742783178}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 2}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 2}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 3}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 2}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 2.449489742783178}}, "df": 24, "m": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 5}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 4, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}, "v": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.Channel": {"tf": 1}, "pyxtream.pyxtream.Episode": {"tf": 1}, "pyxtream.pyxtream.Serie": {"tf": 1}}, "df": 4}, "o": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2.8284271247461903}, "pyxtream.pyxtream.XTream.printx": {"tf": 2}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 2.449489742783178}, "pyxtream.pyxtream.XTream.download_video": {"tf": 2}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 11, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1.4142135623730951}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2.23606797749979}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 4}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 2}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.constants": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}}, "df": 2}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2.6457513110645907}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 4, "s": {"docs": {"pyxtream.pyxtream.XTream": {"tf": 1}}, "df": 1}}}}}}, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1.7320508075688772}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}}, "df": 1}}, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 1, "d": {"docs": {"pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.constants": {"tf": 1}, "pyxtream.pyxtream": {"tf": 1}}, "df": 2}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.Channel": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 6}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 2.449489742783178}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 4}}, "m": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1.4142135623730951}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 4}}}, "g": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.4142135623730951}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 2}}, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1.4142135623730951}}, "df": 3}}}, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}}, "x": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.XTream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 4}}}}}, "m": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "v": {"docs": {"pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "v": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.XTream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 4}}}, "t": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 4, "s": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 3}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}}}, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 2}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 8, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}}, "df": 4, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 2}}}}}}}}, "|": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 4}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 2}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1}}, "df": 1}}}}}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}}}, "f": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 5}, "d": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 2}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1.4142135623730951}}, "df": 6, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "g": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 2.8284271247461903}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 2.23606797749979}}, "df": 3}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1.4142135623730951}}, "df": 1, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream": {"tf": 1}}, "df": 1}}}}}}, "b": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}}}}}, "c": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.Group": {"tf": 1}, "pyxtream.pyxtream.Episode": {"tf": 1}, "pyxtream.pyxtream.Serie": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}, "pyxtream.pyxtream.Season": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1.7320508075688772}}, "df": 10}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Season": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.7320508075688772}}, "df": 1}}}}, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 2}}, "c": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2.23606797749979}, "pyxtream.pyxtream.XTream.printx": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 8, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.Channel": {"tf": 1}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.download_video": {"tf": 2}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1.7320508075688772}}, "df": 8, "i": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}}, "df": 1}}, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 8}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 4}}, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Episode": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"pyxtream.pyxtream.Season": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 3}, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}}, "df": 2}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream": {"tf": 1}, "pyxtream.pyxtream.Channel": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1.4142135623730951}}, "df": 4}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1.4142135623730951}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "o": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}, "a": {"docs": {"pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.Channel": {"tf": 1}, "pyxtream.pyxtream.Group": {"tf": 1}, "pyxtream.pyxtream.Episode": {"tf": 1}, "pyxtream.pyxtream.Serie": {"tf": 1}, "pyxtream.pyxtream.Season": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 6}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 8, "s": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 7}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}}}}}}}, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.rest_api": {"tf": 1}}, "df": 2}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}}, "df": 1}}}}}}, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 3, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.Channel": {"tf": 1}, "pyxtream.pyxtream.Group": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.7320508075688772}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 7, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}}, "df": 1}}}}}}}}}}}, "f": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Group": {"tf": 1}, "pyxtream.pyxtream.Episode": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.load_iptv": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.7320508075688772}}, "df": 15, "f": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.get_state": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 2}}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2.8284271247461903}, "pyxtream.pyxtream.XTream.printx": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 2}}, "df": 4}}}}}}}, "u": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2}}}, "b": {"docs": {}, "df": 0, "j": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1.4142135623730951}}, "df": 4}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.Serie.export_json": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 3}}}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 3, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 2.8284271247461903}, "pyxtream.pyxtream.XTream.printx": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.7320508075688772}}, "df": 4}}}}}}, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1.4142135623730951}}, "df": 5}, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}}, "df": 2}}, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 2}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1.4142135623730951}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1}}, "df": 1}, "d": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}, "s": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}, "w": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.Channel.export_json": {"tf": 1}, "pyxtream.pyxtream.XTream": {"tf": 1}, "pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.authenticate": {"tf": 1}, "pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 9, "i": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.Season": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 3}}}}, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2}, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}, "pyxtream.pyxtream.XTream.vodInfoByID": {"tf": 1.4142135623730951}}, "df": 2, "s": {"docs": {"pyxtream.pyxtream.Group": {"tf": 1}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 4}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.rest_api.FlaskWrap": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1.7320508075688772}}, "df": 3}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 2}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}}, "df": 1}}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}, "y": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 2}, "i": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1.4142135623730951}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.Episode": {"tf": 1}, "pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 2, "s": {"docs": {"pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 1}}}}}}, "g": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.pyxtream.XTream.allLiveEpgByStream": {"tf": 1}, "pyxtream.pyxtream.XTream.allEpg": {"tf": 1}}, "df": 4}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1, "s": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}}, "df": 1, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}}}, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.pyxtream.XTream.authenticate": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}}, "df": 1}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"pyxtream.pyxtream.XTream.download_video": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {"pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}}, "df": 2, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.printx": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.7320508075688772}, "pyxtream.rest_api.FlaskWrap.name": {"tf": 1.4142135623730951}}, "df": 4}}}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"pyxtream.pyxtream.XTream.liveEpgByStreamAndLimit": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1, "n": {"docs": {}, "df": 0, "e": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}}, "df": 1}}, "t": {"docs": {"pyxtream.rest_api.FlaskWrap.daemon": {"tf": 1}}, "df": 1, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}}}}, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.pyxtream.XTream.__init__": {"tf": 1}, "pyxtream.pyxtream.XTream.get_download_progress": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_last_7days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_last_30days": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.get_state": {"tf": 1.4142135623730951}, "pyxtream.pyxtream.XTream.search_stream": {"tf": 1.4142135623730951}}, "df": 6}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"pyxtream.pyxtream.XTream.search_stream": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1.4142135623730951}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 3}}}}}}, "w": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}, "pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 2}}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"pyxtream.pyxtream.XTream.get_series_info_by_id": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {"pyxtream.rest_api.FlaskWrap.__init__": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"pyxtream.rest_api.FlaskWrap.name": {"tf": 1}}, "df": 1}}}}}, "y": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {"pyxtream.rest_api.FlaskWrap.run": {"tf": 1}}, "df": 1}}}}}}, "pipeline": ["trimmer"], "_isPrebuiltIndex": true};
// mirrored in build-search-index.js (part 1)
// Also split on html tags. this is a cheap heuristic, but good enough.
diff --git a/functional_test.py b/functional_test.py
index 0b8e6d7..a9e43f9 100755
--- a/functional_test.py
+++ b/functional_test.py
@@ -4,14 +4,22 @@
"""
import sys
+import os
from time import sleep
-
+from timeit import default_timer as timer
+from dotenv import load_dotenv
from pyxtream import XTream, __version__
-PROVIDER_NAME = ""
-PROVIDER_URL = ""
-PROVIDER_USERNAME = ""
-PROVIDER_PASSWORD = ""
+# Load environment variables from a local .env file
+load_dotenv()
+
+# Determine which provider prefix to use (defaults to 'PROVIDER' if not set)
+PREFIX = os.getenv("ACTIVE_PROVIDER", "PROVIDER")
+
+PROVIDER_NAME = os.getenv(f"{PREFIX}_NAME", "")
+PROVIDER_URL = os.getenv(f"{PREFIX}_URL", "")
+PROVIDER_USERNAME = os.getenv(f"{PREFIX}_USERNAME", "")
+PROVIDER_PASSWORD = os.getenv(f"{PREFIX}_PASSWORD", "")
if PROVIDER_URL == "" or PROVIDER_USERNAME == "" or PROVIDER_PASSWORD == "":
print("Please edit this file with the provider credentials")
@@ -95,8 +103,12 @@ def str2list(input_string: str) -> list:
sys.exit(0)
elif choice == 1:
+ dt = 0
+ start = timer()
if not xt.load_iptv():
print("Something wrong")
+ dt = timer() - start
+ print(f"Loaded in {dt:.3f} sec")
elif choice == 2:
search_string = input("Search for REGEX (ex. '^Destiny.*$'): ")
diff --git a/poetry.lock b/poetry.lock
index 5571245..cdf6aba 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,25 +1,17 @@
-# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand.
+# This file is automatically @generated by Poetry 2.3.4 and should not be changed by hand.
[[package]]
name = "attrs"
-version = "25.1.0"
+version = "26.1.0"
description = "Classes Without Boilerplate"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
groups = ["main"]
files = [
- {file = "attrs-25.1.0-py3-none-any.whl", hash = "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a"},
- {file = "attrs-25.1.0.tar.gz", hash = "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e"},
+ {file = "attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309"},
+ {file = "attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"},
]
-[package.extras]
-benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"]
-cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"]
-dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"]
-docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
-tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"]
-tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""]
-
[[package]]
name = "blinker"
version = "1.9.0"
@@ -35,116 +27,153 @@ files = [
[[package]]
name = "certifi"
-version = "2025.1.31"
+version = "2026.5.20"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
groups = ["main"]
files = [
- {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"},
- {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"},
+ {file = "certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897"},
+ {file = "certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d"},
]
[[package]]
name = "charset-normalizer"
-version = "3.4.1"
+version = "3.4.7"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
optional = false
python-versions = ">=3.7"
groups = ["main"]
files = [
- {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"},
- {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"},
- {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"},
- {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"},
- {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"},
- {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"},
- {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"},
- {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"},
- {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"},
- {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943"},
+ {file = "charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00"},
+ {file = "charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6"},
+ {file = "charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110"},
+ {file = "charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c"},
+ {file = "charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e5f4d355f0a2b1a31bc3edec6795b46324349c9cb25eed068049e4f472fb4259"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:16d971e29578a5e97d7117866d15889a4a07befe0e87e703ed63cd90cb348c01"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dca4bbc466a95ba9c0234ef56d7dd9509f63da22274589ebd4ed7f1f4d4c54e3"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e80c8378d8f3d83cd3164da1ad2df9e37a666cdde7b1cb2298ed0b558064be30"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:36836d6ff945a00b88ba1e4572d721e60b5b8c98c155d465f56ad19d68f23734"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-manylinux_2_31_armv7l.whl", hash = "sha256:bd9b23791fe793e4968dba0c447e12f78e425c59fc0e3b97f6450f4781f3ee60"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aef65cd602a6d0e0ff6f9930fcb1c8fec60dd2cfcb6facaf4bdb0e5873042db0"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:82b271f5137d07749f7bf32f70b17ab6eaabedd297e75dce75081a24f76eb545"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:1efde3cae86c8c273f1eb3b287be7d8499420cf2fe7585c41d370d3e790054a5"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:c593052c465475e64bbfe5dbd81680f64a67fdc752c56d7a0ae205dc8aeefe0f"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:af21eb4409a119e365397b2adbaca4c9ccab56543a65d5dbd9f920d6ac29f686"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:84c018e49c3bf790f9c2771c45e9313a08c2c2a6342b162cd650258b57817706"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dd915403e231e6b1809fe9b6d9fc55cf8fb5e02765ac625d9cd623342a7905d7"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-win32.whl", hash = "sha256:320ade88cfb846b8cd6b4ddf5ee9e80ee0c1f52401f2456b84ae1ae6a1a5f207"},
+ {file = "charset_normalizer-3.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:1dc8b0ea451d6e69735094606991f32867807881400f808a106ee1d963c46a83"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:177a0ba5f0211d488e295aaf82707237e331c24788d8d76c96c5a41594723217"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e0d51f618228538a3e8f46bd246f87a6cd030565e015803691603f55e12afb5"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:14265bfe1f09498b9d8ec91e9ec9fa52775edf90fcbde092b25f4a33d444fea9"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:87fad7d9ba98c86bcb41b2dc8dbb326619be2562af1f8ff50776a39e55721c5a"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f22dec1690b584cea26fade98b2435c132c1b5f68e39f5a0b7627cd7ae31f1dc"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:d61f00a0869d77422d9b2aba989e2d24afa6ffd552af442e0e58de4f35ea6d00"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6370e8686f662e6a3941ee48ed4742317cafbe5707e36406e9df792cdb535776"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a6c5863edfbe888d9eff9c8b8087354e27618d9da76425c119293f11712a6319"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ed065083d0898c9d5b4bbec7b026fd755ff7454e6e8b73a67f8c744b13986e24"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2cd4a60d0e2fb04537162c62bbbb4182f53541fe0ede35cdf270a1c1e723cc42"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:813c0e0132266c08eb87469a642cb30aaff57c5f426255419572aaeceeaa7bf4"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:07d9e39b01743c3717745f4c530a6349eadbfa043c7577eef86c502c15df2c67"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c0f081d69a6e58272819b70288d3221a6ee64b98df852631c80f293514d3b274"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-win32.whl", hash = "sha256:8751d2787c9131302398b11e6c8068053dcb55d5a8964e114b6e196cf16cb366"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:12a6fff75f6bc66711b73a2f0addfc4c8c15a20e805146a02d147a318962c444"},
+ {file = "charset_normalizer-3.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:bb8cc7534f51d9a017b93e3e85b260924f909601c3df002bcdb58ddb4dc41a5c"},
+ {file = "charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d"},
+ {file = "charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5"},
]
[[package]]
@@ -178,75 +207,116 @@ markers = {main = "extra == \"flask\" and platform_system == \"Windows\"", dev =
[[package]]
name = "coverage"
-version = "7.6.12"
+version = "7.10.7"
description = "Code coverage measurement for Python"
optional = false
python-versions = ">=3.9"
groups = ["dev"]
files = [
- {file = "coverage-7.6.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:704c8c8c6ce6569286ae9622e534b4f5b9759b6f2cd643f1c1a61f666d534fe8"},
- {file = "coverage-7.6.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ad7525bf0241e5502168ae9c643a2f6c219fa0a283001cee4cf23a9b7da75879"},
- {file = "coverage-7.6.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06097c7abfa611c91edb9e6920264e5be1d6ceb374efb4986f38b09eed4cb2fe"},
- {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:220fa6c0ad7d9caef57f2c8771918324563ef0d8272c94974717c3909664e674"},
- {file = "coverage-7.6.12-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3688b99604a24492bcfe1c106278c45586eb819bf66a654d8a9a1433022fb2eb"},
- {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d1a987778b9c71da2fc8948e6f2656da6ef68f59298b7e9786849634c35d2c3c"},
- {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cec6b9ce3bd2b7853d4a4563801292bfee40b030c05a3d29555fd2a8ee9bd68c"},
- {file = "coverage-7.6.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ace9048de91293e467b44bce0f0381345078389814ff6e18dbac8fdbf896360e"},
- {file = "coverage-7.6.12-cp310-cp310-win32.whl", hash = "sha256:ea31689f05043d520113e0552f039603c4dd71fa4c287b64cb3606140c66f425"},
- {file = "coverage-7.6.12-cp310-cp310-win_amd64.whl", hash = "sha256:676f92141e3c5492d2a1596d52287d0d963df21bf5e55c8b03075a60e1ddf8aa"},
- {file = "coverage-7.6.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e18aafdfb3e9ec0d261c942d35bd7c28d031c5855dadb491d2723ba54f4c3015"},
- {file = "coverage-7.6.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66fe626fd7aa5982cdebad23e49e78ef7dbb3e3c2a5960a2b53632f1f703ea45"},
- {file = "coverage-7.6.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ef01d70198431719af0b1f5dcbefc557d44a190e749004042927b2a3fed0702"},
- {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e92ae5a289a4bc4c0aae710c0948d3c7892e20fd3588224ebe242039573bf0"},
- {file = "coverage-7.6.12-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e695df2c58ce526eeab11a2e915448d3eb76f75dffe338ea613c1201b33bab2f"},
- {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d74c08e9aaef995f8c4ef6d202dbd219c318450fe2a76da624f2ebb9c8ec5d9f"},
- {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e995b3b76ccedc27fe4f477b349b7d64597e53a43fc2961db9d3fbace085d69d"},
- {file = "coverage-7.6.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b1f097878d74fe51e1ddd1be62d8e3682748875b461232cf4b52ddc6e6db0bba"},
- {file = "coverage-7.6.12-cp311-cp311-win32.whl", hash = "sha256:1f7ffa05da41754e20512202c866d0ebfc440bba3b0ed15133070e20bf5aeb5f"},
- {file = "coverage-7.6.12-cp311-cp311-win_amd64.whl", hash = "sha256:e216c5c45f89ef8971373fd1c5d8d1164b81f7f5f06bbf23c37e7908d19e8558"},
- {file = "coverage-7.6.12-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b172f8e030e8ef247b3104902cc671e20df80163b60a203653150d2fc204d1ad"},
- {file = "coverage-7.6.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:641dfe0ab73deb7069fb972d4d9725bf11c239c309ce694dd50b1473c0f641c3"},
- {file = "coverage-7.6.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e549f54ac5f301e8e04c569dfdb907f7be71b06b88b5063ce9d6953d2d58574"},
- {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959244a17184515f8c52dcb65fb662808767c0bd233c1d8a166e7cf74c9ea985"},
- {file = "coverage-7.6.12-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bda1c5f347550c359f841d6614fb8ca42ae5cb0b74d39f8a1e204815ebe25750"},
- {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1ceeb90c3eda1f2d8c4c578c14167dbd8c674ecd7d38e45647543f19839dd6ea"},
- {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f16f44025c06792e0fb09571ae454bcc7a3ec75eeb3c36b025eccf501b1a4c3"},
- {file = "coverage-7.6.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b076e625396e787448d27a411aefff867db2bffac8ed04e8f7056b07024eed5a"},
- {file = "coverage-7.6.12-cp312-cp312-win32.whl", hash = "sha256:00b2086892cf06c7c2d74983c9595dc511acca00665480b3ddff749ec4fb2a95"},
- {file = "coverage-7.6.12-cp312-cp312-win_amd64.whl", hash = "sha256:7ae6eabf519bc7871ce117fb18bf14e0e343eeb96c377667e3e5dd12095e0288"},
- {file = "coverage-7.6.12-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:488c27b3db0ebee97a830e6b5a3ea930c4a6e2c07f27a5e67e1b3532e76b9ef1"},
- {file = "coverage-7.6.12-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d1095bbee1851269f79fd8e0c9b5544e4c00c0c24965e66d8cba2eb5bb535fd"},
- {file = "coverage-7.6.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0533adc29adf6a69c1baa88c3d7dbcaadcffa21afbed3ca7a225a440e4744bf9"},
- {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53c56358d470fa507a2b6e67a68fd002364d23c83741dbc4c2e0680d80ca227e"},
- {file = "coverage-7.6.12-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64cbb1a3027c79ca6310bf101014614f6e6e18c226474606cf725238cf5bc2d4"},
- {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79cac3390bfa9836bb795be377395f28410811c9066bc4eefd8015258a7578c6"},
- {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9b148068e881faa26d878ff63e79650e208e95cf1c22bd3f77c3ca7b1d9821a3"},
- {file = "coverage-7.6.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8bec2ac5da793c2685ce5319ca9bcf4eee683b8a1679051f8e6ec04c4f2fd7dc"},
- {file = "coverage-7.6.12-cp313-cp313-win32.whl", hash = "sha256:200e10beb6ddd7c3ded322a4186313d5ca9e63e33d8fab4faa67ef46d3460af3"},
- {file = "coverage-7.6.12-cp313-cp313-win_amd64.whl", hash = "sha256:2b996819ced9f7dbb812c701485d58f261bef08f9b85304d41219b1496b591ef"},
- {file = "coverage-7.6.12-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:299cf973a7abff87a30609879c10df0b3bfc33d021e1adabc29138a48888841e"},
- {file = "coverage-7.6.12-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4b467a8c56974bf06e543e69ad803c6865249d7a5ccf6980457ed2bc50312703"},
- {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2458f275944db8129f95d91aee32c828a408481ecde3b30af31d552c2ce284a0"},
- {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a9d8be07fb0832636a0f72b80d2a652fe665e80e720301fb22b191c3434d924"},
- {file = "coverage-7.6.12-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14d47376a4f445e9743f6c83291e60adb1b127607a3618e3185bbc8091f0467b"},
- {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b95574d06aa9d2bd6e5cc35a5bbe35696342c96760b69dc4287dbd5abd4ad51d"},
- {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:ecea0c38c9079570163d663c0433a9af4094a60aafdca491c6a3d248c7432827"},
- {file = "coverage-7.6.12-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2251fabcfee0a55a8578a9d29cecfee5f2de02f11530e7d5c5a05859aa85aee9"},
- {file = "coverage-7.6.12-cp313-cp313t-win32.whl", hash = "sha256:eb5507795caabd9b2ae3f1adc95f67b1104971c22c624bb354232d65c4fc90b3"},
- {file = "coverage-7.6.12-cp313-cp313t-win_amd64.whl", hash = "sha256:f60a297c3987c6c02ffb29effc70eadcbb412fe76947d394a1091a3615948e2f"},
- {file = "coverage-7.6.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e7575ab65ca8399c8c4f9a7d61bbd2d204c8b8e447aab9d355682205c9dd948d"},
- {file = "coverage-7.6.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8161d9fbc7e9fe2326de89cd0abb9f3599bccc1287db0aba285cb68d204ce929"},
- {file = "coverage-7.6.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a1e465f398c713f1b212400b4e79a09829cd42aebd360362cd89c5bdc44eb87"},
- {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f25d8b92a4e31ff1bd873654ec367ae811b3a943583e05432ea29264782dc32c"},
- {file = "coverage-7.6.12-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a936309a65cc5ca80fa9f20a442ff9e2d06927ec9a4f54bcba9c14c066323f2"},
- {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa6f302a3a0b5f240ee201297fff0bbfe2fa0d415a94aeb257d8b461032389bd"},
- {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f973643ef532d4f9be71dd88cf7588936685fdb576d93a79fe9f65bc337d9d73"},
- {file = "coverage-7.6.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78f5243bb6b1060aed6213d5107744c19f9571ec76d54c99cc15938eb69e0e86"},
- {file = "coverage-7.6.12-cp39-cp39-win32.whl", hash = "sha256:69e62c5034291c845fc4df7f8155e8544178b6c774f97a99e2734b05eb5bed31"},
- {file = "coverage-7.6.12-cp39-cp39-win_amd64.whl", hash = "sha256:b01a840ecc25dce235ae4c1b6a0daefb2a203dba0e6e980637ee9c2f6ee0df57"},
- {file = "coverage-7.6.12-pp39.pp310-none-any.whl", hash = "sha256:7e39e845c4d764208e7b8f6a21c541ade741e2c41afabdfa1caa28687a3c98cf"},
- {file = "coverage-7.6.12-py3-none-any.whl", hash = "sha256:eb8668cfbc279a536c633137deeb9435d2962caec279c3f8cf8b91fff6ff8953"},
- {file = "coverage-7.6.12.tar.gz", hash = "sha256:48cfc4641d95d34766ad41d9573cc0f22a48aa88d22657a1fe01dca0dbae4de2"},
+ {file = "coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a"},
+ {file = "coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5"},
+ {file = "coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17"},
+ {file = "coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b"},
+ {file = "coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87"},
+ {file = "coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e"},
+ {file = "coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e"},
+ {file = "coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df"},
+ {file = "coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0"},
+ {file = "coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13"},
+ {file = "coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b"},
+ {file = "coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807"},
+ {file = "coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59"},
+ {file = "coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a"},
+ {file = "coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699"},
+ {file = "coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d"},
+ {file = "coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e"},
+ {file = "coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23"},
+ {file = "coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab"},
+ {file = "coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82"},
+ {file = "coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2"},
+ {file = "coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61"},
+ {file = "coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14"},
+ {file = "coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2"},
+ {file = "coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a"},
+ {file = "coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417"},
+ {file = "coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973"},
+ {file = "coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c"},
+ {file = "coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7"},
+ {file = "coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6"},
+ {file = "coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59"},
+ {file = "coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b"},
+ {file = "coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a"},
+ {file = "coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb"},
+ {file = "coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1"},
+ {file = "coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256"},
+ {file = "coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba"},
+ {file = "coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf"},
+ {file = "coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d"},
+ {file = "coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b"},
+ {file = "coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e"},
+ {file = "coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b"},
+ {file = "coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49"},
+ {file = "coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911"},
+ {file = "coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0"},
+ {file = "coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f"},
+ {file = "coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c"},
+ {file = "coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f"},
+ {file = "coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698"},
+ {file = "coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843"},
+ {file = "coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546"},
+ {file = "coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c"},
+ {file = "coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15"},
+ {file = "coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4"},
+ {file = "coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0"},
+ {file = "coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0"},
+ {file = "coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65"},
+ {file = "coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541"},
+ {file = "coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6"},
+ {file = "coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999"},
+ {file = "coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2"},
+ {file = "coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a"},
+ {file = "coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb"},
+ {file = "coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb"},
+ {file = "coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520"},
+ {file = "coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32"},
+ {file = "coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f"},
+ {file = "coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a"},
+ {file = "coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360"},
+ {file = "coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69"},
+ {file = "coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14"},
+ {file = "coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe"},
+ {file = "coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e"},
+ {file = "coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd"},
+ {file = "coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2"},
+ {file = "coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681"},
+ {file = "coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880"},
+ {file = "coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63"},
+ {file = "coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2"},
+ {file = "coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d"},
+ {file = "coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0"},
+ {file = "coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699"},
+ {file = "coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9"},
+ {file = "coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f"},
+ {file = "coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1"},
+ {file = "coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0"},
+ {file = "coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399"},
+ {file = "coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235"},
+ {file = "coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d"},
+ {file = "coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a"},
+ {file = "coverage-7.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fff7b9c3f19957020cac546c70025331113d2e61537f6e2441bc7657913de7d3"},
+ {file = "coverage-7.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc91b314cef27742da486d6839b677b3f2793dfe52b51bbbb7cf736d5c29281c"},
+ {file = "coverage-7.10.7-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:567f5c155eda8df1d3d439d40a45a6a5f029b429b06648235f1e7e51b522b396"},
+ {file = "coverage-7.10.7-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af88deffcc8a4d5974cf2d502251bc3b2db8461f0b66d80a449c33757aa9f40"},
+ {file = "coverage-7.10.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7315339eae3b24c2d2fa1ed7d7a38654cba34a13ef19fbcb9425da46d3dc594"},
+ {file = "coverage-7.10.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:912e6ebc7a6e4adfdbb1aec371ad04c68854cd3bf3608b3514e7ff9062931d8a"},
+ {file = "coverage-7.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f49a05acd3dfe1ce9715b657e28d138578bc40126760efb962322c56e9ca344b"},
+ {file = "coverage-7.10.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cce2109b6219f22ece99db7644b9622f54a4e915dad65660ec435e89a3ea7cc3"},
+ {file = "coverage-7.10.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:f3c887f96407cea3916294046fc7dab611c2552beadbed4ea901cbc6a40cc7a0"},
+ {file = "coverage-7.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:635adb9a4507c9fd2ed65f39693fa31c9a3ee3a8e6dc64df033e8fdf52a7003f"},
+ {file = "coverage-7.10.7-cp39-cp39-win32.whl", hash = "sha256:5a02d5a850e2979b0a014c412573953995174743a3f7fa4ea5a6e9a3c5617431"},
+ {file = "coverage-7.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:c134869d5ffe34547d14e174c866fd8fe2254918cc0a95e99052903bc1543e07"},
+ {file = "coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260"},
+ {file = "coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239"},
]
[package.dependencies]
@@ -257,40 +327,44 @@ toml = ["tomli ; python_full_version <= \"3.11.0a6\""]
[[package]]
name = "exceptiongroup"
-version = "1.2.2"
+version = "1.3.1"
description = "Backport of PEP 654 (exception groups)"
optional = false
python-versions = ">=3.7"
groups = ["dev"]
markers = "python_version < \"3.11\""
files = [
- {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
- {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
+ {file = "exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598"},
+ {file = "exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219"},
]
+[package.dependencies]
+typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""}
+
[package.extras]
test = ["pytest (>=6)"]
[[package]]
name = "flask"
-version = "3.1.0"
+version = "3.1.3"
description = "A simple framework for building complex web applications."
optional = true
python-versions = ">=3.9"
groups = ["main"]
markers = "extra == \"flask\""
files = [
- {file = "flask-3.1.0-py3-none-any.whl", hash = "sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136"},
- {file = "flask-3.1.0.tar.gz", hash = "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac"},
+ {file = "flask-3.1.3-py3-none-any.whl", hash = "sha256:f4bcbefc124291925f1a26446da31a5178f9483862233b23c0c96a20701f670c"},
+ {file = "flask-3.1.3.tar.gz", hash = "sha256:0ef0e52b8a9cd932855379197dd8f94047b359ca0a78695144304cb45f87c9eb"},
]
[package.dependencies]
-blinker = ">=1.9"
+blinker = ">=1.9.0"
click = ">=8.1.3"
-importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""}
-itsdangerous = ">=2.2"
-Jinja2 = ">=3.1.2"
-Werkzeug = ">=3.1"
+importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""}
+itsdangerous = ">=2.2.0"
+jinja2 = ">=3.1.2"
+markupsafe = ">=2.1.1"
+werkzeug = ">=3.1.0"
[package.extras]
async = ["asgiref (>=3.2)"]
@@ -298,30 +372,30 @@ dotenv = ["python-dotenv"]
[[package]]
name = "idna"
-version = "3.10"
+version = "3.17"
description = "Internationalized Domain Names in Applications (IDNA)"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.9"
groups = ["main"]
files = [
- {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"},
- {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
+ {file = "idna-3.17-py3-none-any.whl", hash = "sha256:466e48829084efe2548012b855df21540b96f2e20e51bd124c851536556a592c"},
+ {file = "idna-3.17.tar.gz", hash = "sha256:5eb0cb53bc467c12eadcf6de83163ad8527cec9416f44b9b61b19caedad2b87f"},
]
[package.extras]
-all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
+all = ["mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
[[package]]
name = "importlib-metadata"
-version = "8.6.1"
+version = "8.7.1"
description = "Read metadata from Python packages"
optional = true
python-versions = ">=3.9"
groups = ["main"]
-markers = "extra == \"flask\" and python_version < \"3.10\""
+markers = "extra == \"flask\" and python_version == \"3.9\""
files = [
- {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"},
- {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"},
+ {file = "importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151"},
+ {file = "importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb"},
]
[package.dependencies]
@@ -331,21 +405,21 @@ zipp = ">=3.20"
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""]
cover = ["pytest-cov"]
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
-enabler = ["pytest-enabler (>=2.2)"]
+enabler = ["pytest-enabler (>=3.4)"]
perf = ["ipython"]
-test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"]
-type = ["pytest-mypy"]
+test = ["flufl.flake8", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"]
+type = ["mypy (<1.19) ; platform_python_implementation == \"PyPy\"", "pytest-mypy (>=1.0.1)"]
[[package]]
name = "iniconfig"
-version = "2.0.0"
+version = "2.1.0"
description = "brain-dead simple config-ini parsing"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
groups = ["dev"]
files = [
- {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
- {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
+ {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"},
+ {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"},
]
[[package]]
@@ -363,14 +437,14 @@ files = [
[[package]]
name = "jinja2"
-version = "3.1.5"
+version = "3.1.6"
description = "A very fast and expressive template engine."
optional = false
python-versions = ">=3.7"
groups = ["main", "dev"]
files = [
- {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"},
- {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"},
+ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"},
+ {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"},
]
markers = {main = "extra == \"flask\""}
@@ -382,36 +456,36 @@ i18n = ["Babel (>=2.7)"]
[[package]]
name = "jsonschema"
-version = "4.23.0"
+version = "4.25.1"
description = "An implementation of JSON Schema validation for Python"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
groups = ["main"]
files = [
- {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"},
- {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"},
+ {file = "jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63"},
+ {file = "jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85"},
]
[package.dependencies]
attrs = ">=22.2.0"
-jsonschema-specifications = ">=2023.03.6"
+jsonschema-specifications = ">=2023.3.6"
referencing = ">=0.28.4"
rpds-py = ">=0.7.1"
[package.extras]
format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
-format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"]
+format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "rfc3987-syntax (>=1.1.0)", "uri-template", "webcolors (>=24.6.0)"]
[[package]]
name = "jsonschema-specifications"
-version = "2024.10.1"
+version = "2025.9.1"
description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
optional = false
python-versions = ">=3.9"
groups = ["main"]
files = [
- {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"},
- {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"},
+ {file = "jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe"},
+ {file = "jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"},
]
[package.dependencies]
@@ -419,98 +493,126 @@ referencing = ">=0.31.0"
[[package]]
name = "markupsafe"
-version = "3.0.2"
+version = "3.0.3"
description = "Safely add untrusted strings to HTML/XML markup."
optional = false
python-versions = ">=3.9"
groups = ["main", "dev"]
files = [
- {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"},
- {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"},
- {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"},
- {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"},
- {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"},
- {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"},
- {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"},
- {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"},
+ {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"},
+ {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"},
+ {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695"},
+ {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591"},
+ {file = "markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c"},
+ {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f"},
+ {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6"},
+ {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1"},
+ {file = "markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa"},
+ {file = "markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8"},
+ {file = "markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1"},
+ {file = "markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad"},
+ {file = "markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a"},
+ {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50"},
+ {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf"},
+ {file = "markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f"},
+ {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a"},
+ {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115"},
+ {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a"},
+ {file = "markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19"},
+ {file = "markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01"},
+ {file = "markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c"},
+ {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"},
+ {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"},
+ {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"},
+ {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"},
+ {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"},
+ {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"},
+ {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"},
+ {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"},
+ {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"},
+ {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"},
+ {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"},
+ {file = "markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795"},
+ {file = "markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219"},
+ {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6"},
+ {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676"},
+ {file = "markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9"},
+ {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1"},
+ {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc"},
+ {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12"},
+ {file = "markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed"},
+ {file = "markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5"},
+ {file = "markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218"},
+ {file = "markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287"},
+ {file = "markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe"},
+ {file = "markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026"},
+ {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737"},
+ {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97"},
+ {file = "markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d"},
+ {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda"},
+ {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf"},
+ {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe"},
+ {file = "markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9"},
+ {file = "markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581"},
+ {file = "markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9"},
+ {file = "markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa"},
+ {file = "markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26"},
+ {file = "markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc"},
+ {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c"},
+ {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42"},
+ {file = "markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b"},
+ {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758"},
+ {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2"},
+ {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d"},
+ {file = "markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7"},
+ {file = "markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e"},
+ {file = "markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8"},
+ {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"},
]
markers = {main = "extra == \"flask\""}
[[package]]
name = "packaging"
-version = "24.2"
+version = "26.2"
description = "Core utilities for Python packages"
optional = false
python-versions = ">=3.8"
groups = ["dev"]
files = [
- {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"},
- {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"},
+ {file = "packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e"},
+ {file = "packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661"},
]
[[package]]
name = "pdoc"
-version = "15.0.1"
+version = "15.0.4"
description = "API Documentation for Python Projects"
optional = false
python-versions = ">=3.9"
groups = ["dev"]
files = [
- {file = "pdoc-15.0.1-py3-none-any.whl", hash = "sha256:fd437ab8eb55f9b942226af7865a3801e2fb731665199b74fd9a44737dbe20f9"},
- {file = "pdoc-15.0.1.tar.gz", hash = "sha256:3b08382c9d312243ee6c2a1813d0ff517a6ab84d596fa2c6c6b5255b17c3d666"},
+ {file = "pdoc-15.0.4-py3-none-any.whl", hash = "sha256:f9028e85e7bb8475b054e69bde1f6d26fc4693d25d9fa1b1ce9009bec7f7a5c4"},
+ {file = "pdoc-15.0.4.tar.gz", hash = "sha256:cf9680f10f5b4863381f44ef084b1903f8f356acb0d4cc6b64576ba9fb712c82"},
]
[package.dependencies]
@@ -520,30 +622,30 @@ pygments = ">=2.12.0"
[[package]]
name = "pluggy"
-version = "1.5.0"
+version = "1.6.0"
description = "plugin and hook calling mechanisms for python"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
groups = ["dev"]
files = [
- {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
- {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
+ {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"},
+ {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"},
]
[package.extras]
dev = ["pre-commit", "tox"]
-testing = ["pytest", "pytest-benchmark"]
+testing = ["coverage", "pytest", "pytest-benchmark"]
[[package]]
name = "pygments"
-version = "2.19.1"
+version = "2.20.0"
description = "Pygments is a syntax highlighting package written in Python."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
groups = ["dev"]
files = [
- {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"},
- {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"},
+ {file = "pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176"},
+ {file = "pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f"},
]
[package.extras]
@@ -551,46 +653,63 @@ windows-terminal = ["colorama (>=0.4.6)"]
[[package]]
name = "pytest"
-version = "8.3.4"
+version = "8.4.2"
description = "pytest: simple powerful testing with Python"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
groups = ["dev"]
files = [
- {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"},
- {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"},
+ {file = "pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79"},
+ {file = "pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01"},
]
[package.dependencies]
-colorama = {version = "*", markers = "sys_platform == \"win32\""}
-exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
-iniconfig = "*"
-packaging = "*"
+colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""}
+exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""}
+iniconfig = ">=1"
+packaging = ">=20"
pluggy = ">=1.5,<2"
+pygments = ">=2.7.2"
tomli = {version = ">=1", markers = "python_version < \"3.11\""}
[package.extras]
-dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
+dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"]
[[package]]
name = "pytest-cov"
-version = "6.0.0"
+version = "6.3.0"
description = "Pytest plugin for measuring coverage."
optional = false
python-versions = ">=3.9"
groups = ["dev"]
files = [
- {file = "pytest-cov-6.0.0.tar.gz", hash = "sha256:fde0b595ca248bb8e2d76f020b465f3b107c9632e6a1d1705f17834c89dcadc0"},
- {file = "pytest_cov-6.0.0-py3-none-any.whl", hash = "sha256:eee6f1b9e61008bd34975a4d5bab25801eb31898b032dd55addc93e96fcaaa35"},
+ {file = "pytest_cov-6.3.0-py3-none-any.whl", hash = "sha256:440db28156d2468cafc0415b4f8e50856a0d11faefa38f30906048fe490f1749"},
+ {file = "pytest_cov-6.3.0.tar.gz", hash = "sha256:35c580e7800f87ce892e687461166e1ac2bcb8fb9e13aea79032518d6e503ff2"},
]
[package.dependencies]
coverage = {version = ">=7.5", extras = ["toml"]}
-pytest = ">=4.6"
+pluggy = ">=1.2"
+pytest = ">=6.2.5"
[package.extras]
testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"]
+[[package]]
+name = "python-dotenv"
+version = "1.2.1"
+description = "Read key-value pairs from a .env file and set them as environment variables"
+optional = false
+python-versions = ">=3.9"
+groups = ["dev"]
+files = [
+ {file = "python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61"},
+ {file = "python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6"},
+]
+
+[package.extras]
+cli = ["click (>=5.0)"]
+
[[package]]
name = "referencing"
version = "0.36.2"
@@ -610,19 +729,19 @@ typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""}
[[package]]
name = "requests"
-version = "2.32.3"
+version = "2.32.5"
description = "Python HTTP for Humans."
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
groups = ["main"]
files = [
- {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"},
- {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"},
+ {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"},
+ {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"},
]
[package.dependencies]
certifi = ">=2017.4.17"
-charset-normalizer = ">=2,<4"
+charset_normalizer = ">=2,<4"
idna = ">=2.5,<4"
urllib3 = ">=1.21.1,<3"
@@ -632,221 +751,288 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
[[package]]
name = "rpds-py"
-version = "0.22.3"
+version = "0.27.1"
description = "Python bindings to Rust's persistent data structures (rpds)"
optional = false
python-versions = ">=3.9"
groups = ["main"]
files = [
- {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"},
- {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"},
- {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24"},
- {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff"},
- {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c"},
- {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e"},
- {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec"},
- {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c"},
- {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09"},
- {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00"},
- {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf"},
- {file = "rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652"},
- {file = "rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8"},
- {file = "rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f"},
- {file = "rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a"},
- {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5"},
- {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb"},
- {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2"},
- {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0"},
- {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1"},
- {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d"},
- {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648"},
- {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74"},
- {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a"},
- {file = "rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64"},
- {file = "rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c"},
- {file = "rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e"},
- {file = "rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56"},
- {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45"},
- {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e"},
- {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d"},
- {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38"},
- {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15"},
- {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059"},
- {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e"},
- {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61"},
- {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7"},
- {file = "rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627"},
- {file = "rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4"},
- {file = "rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84"},
- {file = "rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25"},
- {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4"},
- {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5"},
- {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc"},
- {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b"},
- {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518"},
- {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd"},
- {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2"},
- {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16"},
- {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f"},
- {file = "rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de"},
- {file = "rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9"},
- {file = "rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b"},
- {file = "rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b"},
- {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1"},
- {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83"},
- {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd"},
- {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1"},
- {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3"},
- {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130"},
- {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c"},
- {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b"},
- {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333"},
- {file = "rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730"},
- {file = "rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf"},
- {file = "rpds_py-0.22.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea"},
- {file = "rpds_py-0.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e"},
- {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d"},
- {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3"},
- {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091"},
- {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e"},
- {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543"},
- {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d"},
- {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99"},
- {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831"},
- {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520"},
- {file = "rpds_py-0.22.3-cp39-cp39-win32.whl", hash = "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9"},
- {file = "rpds_py-0.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c"},
- {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d"},
- {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd"},
- {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493"},
- {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96"},
- {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123"},
- {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad"},
- {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9"},
- {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e"},
- {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338"},
- {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566"},
- {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe"},
- {file = "rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d"},
- {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c"},
- {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055"},
- {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723"},
- {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728"},
- {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b"},
- {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d"},
- {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11"},
- {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f"},
- {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca"},
- {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3"},
- {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7"},
- {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"},
- {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"},
+ {file = "rpds_py-0.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef"},
+ {file = "rpds_py-0.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be"},
+ {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61"},
+ {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb"},
+ {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657"},
+ {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013"},
+ {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a"},
+ {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1"},
+ {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10"},
+ {file = "rpds_py-0.27.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808"},
+ {file = "rpds_py-0.27.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8"},
+ {file = "rpds_py-0.27.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9"},
+ {file = "rpds_py-0.27.1-cp310-cp310-win32.whl", hash = "sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4"},
+ {file = "rpds_py-0.27.1-cp310-cp310-win_amd64.whl", hash = "sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1"},
+ {file = "rpds_py-0.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881"},
+ {file = "rpds_py-0.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5"},
+ {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e"},
+ {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c"},
+ {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195"},
+ {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52"},
+ {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed"},
+ {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a"},
+ {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde"},
+ {file = "rpds_py-0.27.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21"},
+ {file = "rpds_py-0.27.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9"},
+ {file = "rpds_py-0.27.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948"},
+ {file = "rpds_py-0.27.1-cp311-cp311-win32.whl", hash = "sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39"},
+ {file = "rpds_py-0.27.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15"},
+ {file = "rpds_py-0.27.1-cp311-cp311-win_arm64.whl", hash = "sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746"},
+ {file = "rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90"},
+ {file = "rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5"},
+ {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e"},
+ {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881"},
+ {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec"},
+ {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb"},
+ {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5"},
+ {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a"},
+ {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444"},
+ {file = "rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a"},
+ {file = "rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1"},
+ {file = "rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998"},
+ {file = "rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39"},
+ {file = "rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594"},
+ {file = "rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502"},
+ {file = "rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b"},
+ {file = "rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf"},
+ {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83"},
+ {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf"},
+ {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2"},
+ {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0"},
+ {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418"},
+ {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d"},
+ {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274"},
+ {file = "rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd"},
+ {file = "rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2"},
+ {file = "rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002"},
+ {file = "rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3"},
+ {file = "rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83"},
+ {file = "rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688"},
+ {file = "rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797"},
+ {file = "rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334"},
+ {file = "rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33"},
+ {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a"},
+ {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b"},
+ {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7"},
+ {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136"},
+ {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff"},
+ {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9"},
+ {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60"},
+ {file = "rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e"},
+ {file = "rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212"},
+ {file = "rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675"},
+ {file = "rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3"},
+ {file = "rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456"},
+ {file = "rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a"},
+ {file = "rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772"},
+ {file = "rpds_py-0.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527"},
+ {file = "rpds_py-0.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d"},
+ {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8"},
+ {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc"},
+ {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1"},
+ {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125"},
+ {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905"},
+ {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e"},
+ {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e"},
+ {file = "rpds_py-0.27.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786"},
+ {file = "rpds_py-0.27.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec"},
+ {file = "rpds_py-0.27.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b"},
+ {file = "rpds_py-0.27.1-cp39-cp39-win32.whl", hash = "sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52"},
+ {file = "rpds_py-0.27.1-cp39-cp39-win_amd64.whl", hash = "sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b"},
+ {file = "rpds_py-0.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819"},
+ {file = "rpds_py-0.27.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df"},
+ {file = "rpds_py-0.27.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3"},
+ {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9"},
+ {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc"},
+ {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4"},
+ {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66"},
+ {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e"},
+ {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c"},
+ {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf"},
+ {file = "rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf"},
+ {file = "rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6"},
+ {file = "rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c"},
+ {file = "rpds_py-0.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859"},
+ {file = "rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8"},
]
[[package]]
name = "tomli"
-version = "2.2.1"
+version = "2.4.1"
description = "A lil' TOML parser"
optional = false
python-versions = ">=3.8"
groups = ["dev"]
markers = "python_full_version <= \"3.11.0a6\""
files = [
- {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"},
- {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"},
- {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"},
- {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"},
- {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"},
- {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"},
- {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"},
- {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"},
- {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"},
- {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"},
- {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"},
- {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"},
- {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"},
- {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"},
- {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"},
- {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"},
- {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"},
- {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"},
- {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"},
- {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"},
- {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"},
- {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"},
- {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"},
- {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"},
- {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"},
- {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"},
- {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"},
- {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"},
- {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"},
- {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"},
- {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"},
- {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"},
+ {file = "tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30"},
+ {file = "tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a"},
+ {file = "tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076"},
+ {file = "tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9"},
+ {file = "tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c"},
+ {file = "tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc"},
+ {file = "tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049"},
+ {file = "tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e"},
+ {file = "tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece"},
+ {file = "tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a"},
+ {file = "tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085"},
+ {file = "tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9"},
+ {file = "tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5"},
+ {file = "tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585"},
+ {file = "tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1"},
+ {file = "tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917"},
+ {file = "tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9"},
+ {file = "tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257"},
+ {file = "tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54"},
+ {file = "tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a"},
+ {file = "tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897"},
+ {file = "tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f"},
+ {file = "tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d"},
+ {file = "tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5"},
+ {file = "tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd"},
+ {file = "tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36"},
+ {file = "tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd"},
+ {file = "tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf"},
+ {file = "tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac"},
+ {file = "tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662"},
+ {file = "tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853"},
+ {file = "tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15"},
+ {file = "tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba"},
+ {file = "tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6"},
+ {file = "tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7"},
+ {file = "tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232"},
+ {file = "tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4"},
+ {file = "tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c"},
+ {file = "tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d"},
+ {file = "tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41"},
+ {file = "tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c"},
+ {file = "tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f"},
+ {file = "tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8"},
+ {file = "tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26"},
+ {file = "tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396"},
+ {file = "tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe"},
+ {file = "tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f"},
]
[[package]]
name = "typing-extensions"
-version = "4.12.2"
-description = "Backported and Experimental Type Hints for Python 3.8+"
+version = "4.15.0"
+description = "Backported and Experimental Type Hints for Python 3.9+"
optional = false
-python-versions = ">=3.8"
-groups = ["main"]
-markers = "python_version < \"3.13\""
+python-versions = ">=3.9"
+groups = ["main", "dev"]
files = [
- {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
- {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
+ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"},
+ {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"},
]
+markers = {main = "python_version < \"3.13\"", dev = "python_version < \"3.11\""}
[[package]]
name = "urllib3"
-version = "2.3.0"
+version = "2.6.3"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = ">=3.9"
groups = ["main"]
files = [
- {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"},
- {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"},
+ {file = "urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4"},
+ {file = "urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed"},
]
[package.extras]
-brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""]
+brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""]
h2 = ["h2 (>=4,<5)"]
socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
-zstd = ["zstandard (>=0.18.0)"]
+zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""]
[[package]]
name = "werkzeug"
-version = "3.1.3"
+version = "3.1.8"
description = "The comprehensive WSGI web application library."
optional = true
python-versions = ">=3.9"
groups = ["main"]
markers = "extra == \"flask\""
files = [
- {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"},
- {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"},
+ {file = "werkzeug-3.1.8-py3-none-any.whl", hash = "sha256:63a77fb8892bf28ebc3178683445222aa500e48ebad5ec77b0ad80f8726b1f50"},
+ {file = "werkzeug-3.1.8.tar.gz", hash = "sha256:9bad61a4268dac112f1c5cd4630a56ede601b6ed420300677a869083d70a4c44"},
]
[package.dependencies]
-MarkupSafe = ">=2.1.1"
+markupsafe = ">=2.1.1"
[package.extras]
watchdog = ["watchdog (>=2.3)"]
[[package]]
name = "zipp"
-version = "3.21.0"
+version = "3.23.1"
description = "Backport of pathlib-compatible object wrapper for zip files"
optional = true
python-versions = ">=3.9"
groups = ["main"]
-markers = "extra == \"flask\" and python_version < \"3.10\""
+markers = "extra == \"flask\" and python_version == \"3.9\""
files = [
- {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"},
- {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"},
+ {file = "zipp-3.23.1-py3-none-any.whl", hash = "sha256:0b3596c50a5c700c9cb40ba8d86d9f2cc4807e9bedb06bcdf7fac85633e444dc"},
+ {file = "zipp-3.23.1.tar.gz", hash = "sha256:32120e378d32cd9714ad503c1d024619063ec28aad2248dc6672ad13edfa5110"},
]
[package.extras]
@@ -854,7 +1040,7 @@ check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"
cover = ["pytest-cov"]
doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
enabler = ["pytest-enabler (>=2.2)"]
-test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"]
+test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more_itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"]
type = ["pytest-mypy"]
[extras]
@@ -863,4 +1049,4 @@ flask = ["flask"]
[metadata]
lock-version = "2.1"
python-versions = ">=3.9"
-content-hash = "9e2d1d7c693332f8be070c07847ee550be06813142ed10abc1deb904222a374c"
+content-hash = "d86fd154ae79a287149e3b5e063602af8967583a10a000d729e080f3fa099a6b"
diff --git a/pyproject.toml b/pyproject.toml
index 4ea3978..673a3d9 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,10 +1,10 @@
[project]
name = "pyxtream"
-version = "0.8.0"
+version = "0.9.0"
requires-python = ">=3.9"
description = "xtream IPTV loader"
authors = [{name = "Claudio Olmi", email = ""}]
-license = "GPL3"
+license = "GPL-3.0-or-later"
readme = "README.md"
homepage = "https://github.com/superolmo/pyxtream"
classifiers = [
@@ -28,6 +28,7 @@ flask = ["flask>=3.1.0,<4.0.0"]
pdoc = "^15.0.1"
pytest = "^8.3.4"
pytest-cov = "^6.0.0"
+python-dotenv = "^1.0.1"
[build-system]
requires = ["poetry-core"]
diff --git a/pyxtream/constants.py b/pyxtream/constants.py
new file mode 100644
index 0000000..412554b
--- /dev/null
+++ b/pyxtream/constants.py
@@ -0,0 +1,26 @@
+"""
+Centralized constants for the pyxtream library
+"""
+
+SSL_FIRST = True
+SECONDS_IN_DAY = 86400
+SECONDS_IN_YEAR = 31536000
+DEFAULT_RELOAD_TIME_SEC = 28800 # 8 hours
+DEFAULT_FLASK_PORT = 5000
+
+AUTH_MAX_ATTEMPTS = 3
+AUTH_TIMEOUT_SEC = 4
+AUTH_LOOP_EXIT_VALUE = 31
+
+REQUEST_MAX_ATTEMPTS = 10
+REQUEST_DEFAULT_TIMEOUT = (2, 15)
+DOWNLOAD_TIMEOUT_SEC = 10
+
+KB_FACTOR = 1024
+MB_FACTOR = 1024 * 1024
+DOWNLOAD_BLOCK_SIZE = 4 * MB_FACTOR
+REQUEST_BLOCK_SIZE = 1 * MB_FACTOR
+
+CATCH_ALL_CATEGORY_ID = 9999
+MOVIES_RECENT_30_DAYS_THRESHOLD = 31
+MOVIES_RECENT_7_DAYS_THRESHOLD = 7
diff --git a/pyxtream/html/index.html b/pyxtream/html/index.html
index c4be097..e508c7d 100644
--- a/pyxtream/html/index.html
+++ b/pyxtream/html/index.html
@@ -713,6 +713,24 @@
return "";
}
+/**
+ * Check if the application is running in offline mode and update the UI
+ */
+async function updateOfflineStatus() {
+ try {
+ const response = await fetch(API_BASE_URL + "/get_state");
+ const state = await response.json();
+ if (state.offline) {
+ const brand = document.querySelector('.navbar-brand');
+ if (!brand.innerHTML.includes('OFFLINE MODE')) {
+ brand.innerHTML += ' OFFLINE MODE ';
+ }
+ }
+ } catch (e) {
+ console.error("Failed to check state", e);
+ }
+}
+
/**
* Send search string to server, get the result, and prepare output in search_result element
* @param {integer} page number
@@ -1005,6 +1023,8 @@
updateDropDownButtonLabel(savedCountry);
}
+ updateOfflineStatus();
+
// Trigger an initial search or load some default content
// For now, let's just load the first batch if all_streams_data is empty
// In a real app, you might have a default search or "recently added" list
diff --git a/pyxtream/pyxtream.py b/pyxtream/pyxtream.py
index ea65eff..3473fd0 100755
--- a/pyxtream/pyxtream.py
+++ b/pyxtream/pyxtream.py
@@ -1,18 +1,6 @@
#!/usr/bin/python3
"""
-pyxtream
-
-Module handles downloading xtream data.
-
-Part of this content comes from
-- https://github.com/chazlarson/py-xtream-codes/blob/master/xtream.py
-- https://github.com/linuxmint/hypnotix
-
-> _Author_: Claudio Olmi
-> _Github_: superolmo
-
-
-> _Note_: It does not support M3U
+High-performance Python library for Xtream Codes IPTV panels. Supports Live TV, VOD, and Series.
"""
import json
@@ -25,12 +13,30 @@
from os import path as osp
# Timing xtream json downloads
from timeit import default_timer as timer
-from typing import Optional, Tuple
+from typing import Any, Optional, Tuple
import requests
from pyxtream import api
from pyxtream.schemaValidator import SchemaType, schemaValidator
+from pyxtream.constants import (
+ AUTH_LOOP_EXIT_VALUE,
+ AUTH_MAX_ATTEMPTS,
+ AUTH_TIMEOUT_SEC,
+ CATCH_ALL_CATEGORY_ID,
+ DEFAULT_FLASK_PORT,
+ DEFAULT_RELOAD_TIME_SEC,
+ DOWNLOAD_BLOCK_SIZE,
+ DOWNLOAD_TIMEOUT_SEC,
+ KB_FACTOR,
+ MB_FACTOR,
+ MOVIES_RECENT_30_DAYS_THRESHOLD,
+ MOVIES_RECENT_7_DAYS_THRESHOLD,
+ REQUEST_BLOCK_SIZE,
+ REQUEST_DEFAULT_TIMEOUT,
+ REQUEST_MAX_ATTEMPTS,
+ SECONDS_IN_YEAR,
+)
try:
from pyxtream.rest_api import FlaskWrap
@@ -38,43 +44,20 @@
except ImportError:
USE_FLASK = False
-SSL_FIRST = True
-
class Channel:
- # Required by Hypnotix
- info = ""
- id = ""
- name = "" # What is the difference between the below name and title?
- logo = ""
- logo_path = ""
- group_title = ""
- title = ""
- url = ""
-
- # XTream
- stream_type: str = ""
- group_id: str = ""
- is_adult: int = 0
- added: int = 0
- epg_channel_id: str = ""
- age_days_from_added: int = 0
- date_now: datetime
-
- # This contains the raw JSON data
- raw: dict = {}
-
- def __init__(self, xtream: object, group_title, stream_info):
+ """Represents a Live TV or VOD stream."""
+ def __init__(self, xtream: object, group_title, stream_info: dict):
self.date_now = datetime.now(timezone.utc)
-
- stream_type = stream_info["stream_type"]
+ self.stream_type = stream_info["stream_type"]
# Adjust the odd "created_live" type
- if stream_type in ("created_live", "radio_streams"):
- stream_type = "live"
+ if self.stream_type in ("created_live", "radio_streams"):
+ self.stream_type = "live"
- if stream_type not in ("live", "movie"):
+ if self.stream_type not in ("live", "movie"):
print(f"Error the channel has unknown stream type "
- f"`{stream_type}`\n`{stream_info}`")
+ f"`{self.stream_type}`\n`{stream_info}`")
+ self.raw = {}
else:
# Raw JSON Channel
self.raw = stream_info
@@ -95,14 +78,14 @@ def __init__(self, xtream: object, group_title, stream_info):
stream_extension = ""
- if stream_type == "live":
+ if self.stream_type == "live":
stream_extension = "ts"
# Check if epg_channel_id key is available
if "epg_channel_id" in stream_info.keys():
self.epg_channel_id = stream_info["epg_channel_id"]
- elif stream_type == "movie":
+ elif self.stream_type == "movie":
stream_extension = stream_info["container_extension"]
# Default to 0
@@ -117,7 +100,7 @@ def __init__(self, xtream: object, group_title, stream_info):
).days
# Required by Hypnotix
- self.url = f"{xtream.server}/{stream_type}/{xtream.authorization['username']}/" \
+ self.url = f"{xtream.server}/{self.stream_type}/{xtream.authorization['username']}/" \
f"{xtream.authorization['password']}/{stream_info['stream_id']}.{stream_extension}"
# Check that the constructed URL is valid
@@ -125,6 +108,7 @@ def __init__(self, xtream: object, group_title, stream_info):
print(f"{self.name} - Bad URL? `{self.url}`")
def export_json(self):
+ """Return a dictionary representation of the channel with its computed URL."""
jsondata = {}
jsondata["url"] = self.url
@@ -135,16 +119,7 @@ def export_json(self):
class Group:
- # Required by Hypnotix
- name = ""
- group_type = ""
-
- # XTream
- group_id = ""
-
- # This contains the raw JSON data
- raw: dict = {}
-
+ """Represents a category of channels, movies, or series."""
def convert_region_shortname_to_fullname(self, shortname):
if shortname == "AR":
@@ -193,17 +168,8 @@ def __init__(self, group_info: dict, stream_type: str):
class Episode:
- # Required by Hypnotix
- title = ""
- name = ""
- info = ""
-
- # XTream
-
- # This contains the raw JSON data
- raw: dict = {}
-
- def __init__(self, xtream: object, series_info, group_title, episode_info) -> None:
+ """Represents a single episode of a TV series."""
+ def __init__(self, xtream: object, series_info, group_title, episode_info: dict) -> None:
# Raw JSON Episode
self.raw = episode_info
@@ -228,21 +194,8 @@ def __init__(self, xtream: object, series_info, group_title, episode_info) -> No
class Serie:
- # Required by Hypnotix
- name = ""
- logo = ""
- logo_path = ""
-
- # XTream
- series_id = ""
- plot = ""
- youtube_trailer = ""
- genre = ""
-
- # This contains the raw JSON data
- raw: dict = {}
-
- def __init__(self, xtream: object, series_info):
+ """Represents a TV Series collection."""
+ def __init__(self, xtream: object, series_info: dict):
series_info["added"] = series_info["last_modified"]
@@ -279,6 +232,7 @@ def __init__(self, xtream: object, series_info):
f"{xtream.authorization['password']}/{self.series_id}/"
def export_json(self):
+ """Return a dictionary representation of the series."""
jsondata = {}
jsondata.update(self.raw)
@@ -288,8 +242,7 @@ def export_json(self):
class Season:
- # Required by Hypnotix
- name = ""
+ """Represents a specific season within a series."""
def __init__(self, name):
self.name = name
@@ -297,81 +250,40 @@ def __init__(self, name):
class XTream:
-
- name = ""
- server = ""
- secure_server = ""
- username = ""
- password = ""
- base_url = ""
- base_url_ssl = ""
-
- cache_path = ""
-
- account_expiration: timedelta
-
- live_type = "Live"
- vod_type = "VOD"
- series_type = "Series"
-
- hide_adult_content = False
-
- live_catch_all_group = Group(
- {"category_id": "9999", "category_name": "xEverythingElse", "parent_id": 0}, live_type
- )
- vod_catch_all_group = Group(
- {"category_id": "9999", "category_name": "xEverythingElse", "parent_id": 0}, vod_type
- )
- series_catch_all_group = Group(
- {"category_id": "9999", "category_name": "xEverythingElse", "parent_id": 0}, series_type
- )
- # If the cached JSON file is older than threshold_time_sec then load a new
- # JSON dictionary from the provider
- threshold_time_sec = -1
-
- validate_json: bool = True
-
+ """Core client for interacting with Xtream Codes IPTV providers."""
def __init__(
self,
provider_name: str,
provider_username: str,
provider_password: str,
provider_url: str,
- headers: dict = None,
+ headers: dict = {},
hide_adult_content: bool = False,
cache_path: str = "",
- reload_time_sec: int = 60*60*8,
+ reload_time_sec: int = DEFAULT_RELOAD_TIME_SEC,
validate_json: bool = False,
enable_flask: bool = False,
debug_flask: bool = True,
- flask_port: int = 5000
+ flask_port: int = DEFAULT_FLASK_PORT
):
- """Initialize Xtream Class
+ """Initialize the XTream client.
+
+ Sets up the connection parameters, authentication state, and local cache
+ configuration for interacting with an Xtream Codes IPTV provider.
Args:
- provider_name (str): Name of the IPTV provider
- provider_username (str): User name of the IPTV provider
- provider_password (str): Password of the IPTV provider
- provider_url (str): URL of the IPTV provider
- headers (dict): Requests Headers
- hide_adult_content(bool, optional): When `True` hide stream that are marked for adult
- cache_path (str, optional): Location where to save loaded files.
- Defaults to empty string.
- reload_time_sec (int, optional): Number of seconds before automatic reloading
- (-1 to turn it OFF)
- validate_json (bool, optional): Check Xtream API provided JSON for validity
- enable_flask (bool, optional): Enable Flask
- debug_flask (bool, optional): Enable the debug mode in Flask
- flask_port (int, optional): Flask Port Number
-
- Returns: XTream Class Instance
-
- - Note 1: If it fails to authorize with provided username and password,
- auth_data will be an empty dictionary.
- - Note 2: The JSON validation option will take considerable amount of time and it should be
- used only as a debug tool. The Xtream API JSON from the provider passes through a
- schema that represent the best available understanding of how the Xtream API
- works.
+ provider_name (str): Human-readable name of the IPTV provider.
+ provider_username (str): Username for authentication.
+ provider_password (str): Password for authentication.
+ provider_url (str): Base URL of the IPTV provider.
+ headers (dict, optional): Custom HTTP headers for requests. Defaults to {}.
+ hide_adult_content (bool, optional): If True, filters out adult content. Defaults to False.
+ cache_path (str, optional): Directory for local data persistence. Defaults to "".
+ reload_time_sec (int, optional): Cache TTL in seconds. Defaults to DEFAULT_RELOAD_TIME_SEC.
+ validate_json (bool, optional): If True, validates responses against schemas. Defaults to False.
+ enable_flask (bool, optional): If True, starts the REST API server. Defaults to False.
+ debug_flask (bool, optional): If True, enables Flask debug mode. Defaults to True.
+ flask_port (int, optional): Port for the Flask server. Defaults to DEFAULT_FLASK_PORT.
"""
self.server = provider_url
self.username = provider_username
@@ -381,6 +293,19 @@ def __init__(
self.hide_adult_content = hide_adult_content
self.threshold_time_sec = reload_time_sec
self.validate_json = validate_json
+ self.live_type = "Live"
+ self.vod_type = "VOD"
+ self.series_type = "Series"
+
+ self.live_catch_all_group = Group(
+ {"category_id": "9999", "category_name": "xEverythingElse", "parent_id": 0}, self.live_type
+ )
+ self.vod_catch_all_group = Group(
+ {"category_id": "9999", "category_name": "xEverythingElse", "parent_id": 0}, self.vod_type
+ )
+ self.series_catch_all_group = Group(
+ {"category_id": "9999", "category_name": "xEverythingElse", "parent_id": 0}, self.series_type
+ )
self.auth_data = {}
self.authorization = {'username': '', 'password': ''}
@@ -394,7 +319,7 @@ def __init__(
self.connection_headers = {}
- self.state = {'authenticated': False, 'loaded': False}
+ self.state = {'authenticated': False, 'loaded': False, 'offline': False}
# Used by REST API to get download progress
self.download_progress: dict = {'StreamId': 0, 'Total': 0, 'Progress': 0}
@@ -444,34 +369,74 @@ def __init__(
self.printx("Web interface not running")
def printx(self, msg: str, end="\n", flush=True):
+ """Print a message prefixed with the provider name.
+
+ Useful for logging multiple instances of the XTream class simultaneously.
+
+ Args:
+ msg (str): The message to be printed.
+ end (str, optional): The string appended after the last value. Defaults to "\\n".
+ flush (bool, optional): Whether to forcibly flush the stream. Defaults to True.
+ """
print(f"{self.name}: {msg}", end=end, flush=flush)
def get_download_progress(self, stream_id: int = None):
- # TODO: Add check for stream specific ID
+ """Return the current download progress as a JSON string.
+
+ Retrieves the state of the downloader, including total bytes and progress.
+
+ Args:
+ stream_id (int, optional): The specific stream ID to check.
+
+ Returns:
+ str: A JSON-formatted string containing 'StreamId', 'Total', and 'Progress'.
+ """
+ if stream_id is not None and stream_id != self.download_progress.get('StreamId'):
+ return json.dumps({'StreamId': stream_id, 'Total': 0, 'Progress': 0})
return json.dumps(self.download_progress)
def get_last_7days(self):
+ """Return movies added in the last 7 days as a JSON string.
+
+ Returns:
+ str: A JSON-formatted list of movies added recently.
+ """
return json.dumps(self.movies_7days, default=lambda x: x.export_json())
def get_last_30days(self):
+ """Return movies added in the last 30 days as a JSON string.
+
+ Returns:
+ str: A JSON-formatted list of movies added in the last month.
+ """
return json.dumps(self.movies_30days, default=lambda x: x.export_json())
+ def get_state(self):
+ """Return the current authentication and loading state as a JSON string.
+
+ Returns:
+ str: A JSON string containing 'authenticated', 'loaded', and 'offline' flags.
+ """
+ return json.dumps(self.state)
+
def search_stream(self, keyword: str,
ignore_case: bool = True,
return_type: str = "LIST",
stream_type: list = ("series", "movies", "channels"),
added_after: datetime = None) -> list:
- """Search for streams
+ """Search for streams across the loaded collection.
+
+ Uses regular expressions to find matches in titles across specified stream types.
Args:
- keyword (str): Keyword to search for. Supports REGEX
- ignore_case (bool, optional): True to ignore case during search. Defaults to "True".
- return_type (str, optional): Output format, 'LIST' or 'JSON'. Defaults to "LIST".
- stream_type (list, optional): Search within specific stream type.
- added_after (datetime, optional): Search for items that have been added after a certain date.
+ keyword (str): The regex pattern or search term.
+ ignore_case (bool, optional): Whether to ignore case in the regex. Defaults to True.
+ return_type (str, optional): The output format, either 'LIST' or 'JSON'. Defaults to "LIST".
+ stream_type (list, optional): Collections to search in. Defaults to ("series", "movies", "channels").
+ added_after (datetime, optional): Filter results added after this date.
Returns:
- list: List with all the results, it could be empty.
+ list: A list of matching items in the requested format (LIST or JSON string).
"""
search_result = []
@@ -505,54 +470,68 @@ def search_stream(self, keyword: str,
return search_result
- def download_video(self, stream_type: str, stream_id: int) -> str:
- """Download Video from Stream ID
+ def download_video(self, stream_id: int) -> str:
+ """Download a video stream by its ID and return the local file path.
+
+ Attempts to resolve the stream ID to a movie or series episode and downloads it.
Args:
- stream_id (int): String identifying the stream ID
+ stream_id (int): The unique ID of the stream to download.
Returns:
- str: Absolute Path Filename where the file was saved. Empty string if could not download
+ str: The absolute local path to the downloaded file, or an empty string on failure.
"""
url = ""
filename = ""
- if stream_type == "series":
- for series_stream in self.series:
- if series_stream.series_id == stream_id:
+
+ # Search for the stream_id within series
+ for series_stream in self.series:
+ if series_stream.series_id == stream_id:
+ if series_stream.episodes and "1" in series_stream.episodes:
episode_object: Episode = series_stream.episodes["1"]
- url = f"{series_stream.url}/{episode_object.id}."\
- f"{episode_object.container_extension}"
+ url = f"{series_stream.url}/{episode_object.id}.{episode_object.container_extension}"
+ # Construct a local filename for the episode
+ fn = f"{self._slugify(series_stream.name)}-E1.{episode_object.container_extension}"
+ filename = osp.join(self.cache_path, fn)
+ break
- if stream_type == "movie":
+ # Search for the stream_id within movies (streams) if not found in series
+ if not url:
for stream in self.movies:
if stream.id == stream_id:
url = stream.url
fn = f"{self._slugify(stream.name)}.{stream.raw['container_extension']}"
filename = osp.join(self.cache_path, fn)
+ break
# If the url was correctly built and file does not exists, start downloading
if url == "":
return ""
- for attempt in range(10):
+ self.download_progress.update({'StreamId': stream_id, 'Total': 0, 'Progress': 0})
+
+ for attempt in range(REQUEST_MAX_ATTEMPTS):
if self._download_video_impl(url, filename):
return filename
return ""
def _download_video_impl(self, url: str, fullpath_filename: str) -> bool:
- """Download a stream
+ """Internal implementation for downloading a stream.
+
+ Handles chunked downloading, progress updates, and resumable transfers via Range headers.
Args:
- url (str): Complete URL of the stream
- fullpath_filename (str): Complete File path where to save the stream
+ url (str): The direct URL of the video stream.
+ fullpath_filename (str): The local destination path.
Returns:
- bool: True if successful, False if error
+ bool: True if the download completed successfully, False otherwise.
"""
ret_code = False
- mb_size = 1024*1024
+ mb_size = MB_FACTOR
headers = self.connection_headers.copy()
+ file_size = 0
try:
self.printx(f"Downloading from URL `{url}` and saving at `{fullpath_filename}`")
@@ -569,7 +548,7 @@ def _download_video_impl(self, url: str, fullpath_filename: str) -> bool:
# Make the request to download
response = requests.get(
- url, timeout=(10),
+ url, timeout=(DOWNLOAD_TIMEOUT_SEC),
stream=True,
allow_redirects=True,
headers=headers
@@ -579,17 +558,16 @@ def _download_video_impl(self, url: str, fullpath_filename: str) -> bool:
# Get content type Binary or Text
content_type = response.headers.get('content-type', None)
- # Get total playlist byte size
- total_content_size = int(response.headers.get('content-length', None))
- total_content_size_mb = total_content_size/mb_size
+ # Calculate the full file size (existing + remaining)
+ remaining_bytes = int(response.headers.get('content-length', 0))
+ total_content_size = remaining_bytes + file_size
+ total_content_size_mb = total_content_size / mb_size
- # Set downloaded size
- downloaded_bytes = 0
self.download_progress['Total'] = total_content_size
- self.download_progress['Progress'] = 0
+ self.download_progress['Progress'] = file_size
# Set stream blocks
- block_bytes = int(4*mb_size) # 4 MB
+ block_bytes = int(DOWNLOAD_BLOCK_SIZE)
self.printx(f"Ready to download {total_content_size_mb:.1f} "
f"MB file ({total_content_size})"
@@ -599,9 +577,8 @@ def _download_video_impl(self, url: str, fullpath_filename: str) -> bool:
# Grab data by block_bytes
for data in response.iter_content(block_bytes, decode_unicode=False):
- downloaded_bytes += block_bytes
- self.download_progress['Progress'] = downloaded_bytes
file.write(data)
+ self.download_progress['Progress'] += len(data)
ret_code = True
else:
@@ -617,20 +594,25 @@ def _download_video_impl(self, url: str, fullpath_filename: str) -> bool:
return ret_code
def _slugify(self, string: str) -> str:
- """Normalize string
-
- Normalizes string, converts to lowercase, removes non-alpha characters,
- and converts spaces to hyphens.
+ """Convert a string to a safe filename format.
Args:
- string (str): String to be normalized
+ string (str): Input string.
Returns:
- str: Normalized String
+ str: A lowercase, sanitized string.
"""
return "".join(x.lower() for x in string if x.isprintable())
def _validate_url(self, url: str) -> bool:
+ """Check if a URL string has a valid format.
+
+ Args:
+ url (str): The URL to validate.
+
+ Returns:
+ bool: True if valid, False otherwise.
+ """
regex = re.compile(
r"^(?:http|ftp)s?://" # http:// or https://
r"(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|" # domain...
@@ -644,13 +626,13 @@ def _validate_url(self, url: str) -> bool:
return re.match(regex, url) is not None
def _get_logo_local_path(self, logo_url: str) -> str:
- """Convert the Logo URL to a local Logo Path
+ """Generate a local cache path for a stream logo URL.
Args:
- logoURL (str): The Logo URL
+ logo_url (str): The remote URL of the logo.
Returns:
- [type]: The logo path as a string or None
+ str: The local file path where the logo should be cached.
"""
local_logo_path = None
if logo_url is not None:
@@ -664,22 +646,30 @@ def _get_logo_local_path(self, logo_url: str) -> str:
return local_logo_path
def authenticate(self):
- """Login to provider"""
+ """Authenticate with the provider and initialize base URLs.
+
+ Attempts to log in using the player_api.php endpoint. On failure, it triggers
+ the offline fallback mechanism if a local cache exists.
+
+ Sets the authentication state and base URLs for subsequent API calls.
+ """
# If we have not yet successfully authenticated, attempt authentication
if self.state["authenticated"] is False:
# Erase any previous data
self.auth_data = {}
- # Loop through 30 seconds
i = 0
r = None
# Prepare the authentication url
url = f"{self.server}/player_api.php?username={self.username}&password={self.password}"
self.printx("Attempting connection... ", end='')
- while i < 30:
+ while i < AUTH_MAX_ATTEMPTS:
try:
- # Request authentication, wait 4 seconds maximum
- r = requests.get(url, timeout=(4), headers=self.connection_headers)
- i = 31
+ # Request authentication, wait AUTH_TIMEOUT_SEC seconds maximum
+ r = requests.get(url, timeout=(AUTH_TIMEOUT_SEC), headers=self.connection_headers)
+ if r.ok:
+ i = AUTH_LOOP_EXIT_VALUE
+ else:
+ i += 1
except (requests.exceptions.ConnectionError, requests.exceptions.ReadTimeout):
time.sleep(1)
print(f"{i} ", end='', flush=True)
@@ -712,17 +702,49 @@ def authenticate(self):
else:
print("")
self.printx(f"Provider `{self.name}` could not be loaded. Reason: `{r.status_code} {r.reason}`")
+ self._fallback_to_offline()
else:
self.printx(f"\n{self.name}: Provider refused the connection")
+ self._fallback_to_offline()
+
+ def _fallback_to_offline(self):
+ """Check for local cache and enter offline mode if available"""
+ cache_exists = False
+ for stream_type in (self.live_type, self.vod_type, self.series_type):
+ filename = f"all_groups_{stream_type}.json"
+ full_filename = osp.join(self.cache_path, f"{self._slugify(self.name)}-{filename}")
+ if osp.isfile(full_filename):
+ cache_exists = True
+ break
+
+ if cache_exists:
+ self.printx("Offline mode active: Using local cache fallback")
+ self.state["offline"] = True
+ self.authorization = {
+ "username": self.username,
+ "password": self.password
+ }
+ self.auth_data = {
+ "user_info": {
+ "username": self.username,
+ "password": self.password,
+ "exp_date": str(int(datetime.now(timezone.utc).timestamp() + SECONDS_IN_YEAR))
+ },
+ "server_info": {"url": self.server}
+ }
+ self.base_url = f"{self.server}/player_api.php?username={self.username}&password={self.password}"
+ self.state["authenticated"] = True
+ else:
+ self.printx("No local cache available.")
- def _load_from_file(self, filename) -> dict:
- """Try to load the dictionary from file
+ def _load_from_file(self, filename: str) -> Optional[Any]:
+ """Load a JSON structure from the local cache.
Args:
- filename ([type]): File name containing the data
+ filename (str): The name of the file to load (without provider prefix).
Returns:
- dict: Dictionary if found and no errors, None if file does not exists
+ Optional[Any]: The loaded data if fresh and available, otherwise None.
"""
# Build the full path
full_filename = osp.join(self.cache_path, f"{self._slugify(self.name)}-{filename}")
@@ -730,37 +752,31 @@ def _load_from_file(self, filename) -> dict:
# If the cached file exists, attempt to load it
if osp.isfile(full_filename):
- my_data = None
-
# Get the elapsed seconds since last file update
file_age_sec = time.time() - osp.getmtime(full_filename)
# If the file was updated less than the threshold time,
# it means that the file is still fresh, we can load it.
+ # If threshold is -1, we force load from file regardless of age (Persistence Mode).
# Otherwise skip and return None to force a re-download
- if self.threshold_time_sec > file_age_sec:
+ if self.state['offline'] or self.threshold_time_sec == -1 or self.threshold_time_sec > file_age_sec:
# Load the JSON data
try:
with open(full_filename, mode="r", encoding="utf-8") as myfile:
- my_data = json.load(myfile)
- if len(my_data) == 0:
- my_data = None
+ return json.load(myfile) or None
except Exception as e:
self.printx(f" - Could not load from file `{full_filename}`: e=`{e}`")
- return my_data
return None
def _save_to_file(self, data_list: dict, filename: str) -> bool:
- """Save a dictionary to file
-
- This function will overwrite the file if already exists
+ """Save a dictionary as a JSON file in the local cache.
Args:
- data_list (dict): Dictionary to save
- filename (str): Name of the file
+ data_list (dict): Data to be persisted.
+ filename (str): Local filename.
Returns:
- bool: True if successful, False if error
+ bool: True if saving was successful.
"""
if data_list is None:
return False
@@ -775,18 +791,13 @@ def _save_to_file(self, data_list: dict, filename: str) -> bool:
return False
def load_iptv(self) -> bool:
- """Load XTream IPTV
+ """Orchestrates the loading and processing of all IPTV content.
- - Add all Live TV to XTream.channels
- - Add all VOD to XTream.movies
- - Add all Series to XTream.series
- Series contains Seasons and Episodes. Those are not automatically
- retrieved from the server to reduce the loading time.
- - Add all groups to XTream.groups
- Groups are for all three channel types, Live TV, VOD, and Series
+ Iterates through Live, VOD, and Series types. Loads categories and streams
+ from the local cache if available and fresh, or fetches them from the provider.
Returns:
- bool: True if successful, False if error
+ bool: True if the loading cycle completed successfully.
"""
# If pyxtream has not authenticated the connection, return empty
if self.state["authenticated"] is False:
@@ -909,7 +920,7 @@ def load_iptv(self) -> bool:
# Some channels have no group,
# so let's add them to the catch all group
if not stream_channel["category_id"]:
- stream_channel["category_id"] = "9999"
+ stream_channel["category_id"] = str(CATCH_ALL_CATEGORY_ID)
elif stream_channel["category_id"] != "1":
pass
@@ -952,16 +963,19 @@ def load_iptv(self) -> bool:
# Save the new channel to the local list of channels
if loading_stream_type == self.live_type:
- if new_channel.group_id == "9999":
+ if new_channel.group_id == CATCH_ALL_CATEGORY_ID:
self.printx(f" - xEverythingElse Channel -> {new_channel.name} - {new_channel.stream_type}")
self.channels.append(new_channel)
elif loading_stream_type == self.vod_type:
- if new_channel.group_id == "9999":
- self.printx(f" - xEverythingElse Channel -> {new_channel.name} - {new_channel.stream_type}")
+ if new_channel.group_id == CATCH_ALL_CATEGORY_ID:
+ try:
+ self.printx(f" - xEverythingElse Channel -> {new_channel.name} - {new_channel.stream_type}")
+ except AttributeError as e:
+ self.printx(f"{new_channel.raw} {e}")
self.movies.append(new_channel)
- if new_channel.age_days_from_added < 31:
+ if new_channel.age_days_from_added < MOVIES_RECENT_30_DAYS_THRESHOLD:
self.movies_30days.append(new_channel)
- if new_channel.age_days_from_added < 7:
+ if new_channel.age_days_from_added < MOVIES_RECENT_7_DAYS_THRESHOLD:
self.movies_7days.append(new_channel)
else:
self.series.append(new_series)
@@ -988,7 +1002,14 @@ def load_iptv(self) -> bool:
return True
def _save_to_file_skipped_streams(self, stream_channel: Channel):
+ """Log skipped streams to a local JSON file for debugging.
+ Args:
+ stream_channel (Channel): The channel object being skipped.
+
+ Returns:
+ bool: True if logging succeeded.
+ """
# Build the full path
full_filename = osp.join(self.cache_path, "skipped_streams.json")
@@ -1004,10 +1025,10 @@ def _save_to_file_skipped_streams(self, stream_channel: Channel):
return False
def get_series_info_by_id(self, get_series: dict):
- """Get Seasons and Episodes for a Series
+ """Fetch and populate seasons and episodes for a specific series object.
Args:
- get_series (dict): Series dictionary
+ get_series (Serie): The series object to be populated with detailed data.
"""
series_seasons = self._load_series_info_by_id_from_provider(get_series.series_id)
@@ -1048,24 +1069,22 @@ def _handle_request_exception(self, exception: requests.exceptions.RequestExcept
else:
self.printx(f" - An unexpected error occurred: {exception}")
- def _get_request(self, url: str, timeout: Tuple[int, int] = (2, 15)) -> Optional[dict]:
- """Generic GET Request with Error handling
+ def _get_request(self, url: str, timeout: Tuple[int, int] = REQUEST_DEFAULT_TIMEOUT) -> Optional[dict]:
+ """Perform a GET request with retries and progress reporting.
Args:
- URL (str): The URL where to GET content
- timeout (Tuple[int, int], optional): Connection and Downloading Timeout.
- Defaults to (2,15).
+ url (str): The target URL.
+ timeout (Tuple[int, int], optional): Connection and read timeout.
Returns:
- Optional[dict]: JSON dictionary of the loaded data, or None
+ Optional[dict]: The parsed JSON response, or None on error.
"""
- kb_size = 1024
all_data = []
down_stats = {"bytes": 0, "kbytes": 0, "mbytes": 0, "start": 0.0, "delta_sec": 0.0}
response = None
- for attempt in range(10):
+ for attempt in range(REQUEST_MAX_ATTEMPTS):
try:
response = requests.get(
url,
@@ -1087,13 +1106,13 @@ def _get_request(self, url: str, timeout: Tuple[int, int] = (2, 15)) -> Optional
down_stats["bytes"] = 0
# Set stream blocks
- block_bytes = int(1*kb_size*kb_size) # 1 MB
+ block_bytes = int(REQUEST_BLOCK_SIZE)
# Grab data by block_bytes
for data in response.iter_content(block_bytes, decode_unicode=False):
down_stats["bytes"] += len(data)
- down_stats["kbytes"] = down_stats["bytes"]/kb_size
- down_stats["mbytes"] = down_stats["bytes"]/kb_size/kb_size
+ down_stats["kbytes"] = down_stats["bytes"] / KB_FACTOR
+ down_stats["mbytes"] = down_stats["bytes"] / MB_FACTOR
down_stats["delta_sec"] = time.perf_counter() - down_stats["start"]
if down_stats["delta_sec"] > 0:
download_speed_average = down_stats["kbytes"] // down_stats["delta_sec"]
@@ -1115,13 +1134,10 @@ def _get_request(self, url: str, timeout: Tuple[int, int] = (2, 15)) -> Optional
# GET Stream Categories
def _load_categories_from_provider(self, stream_type: str):
- """Get from provider all category for specific stream type from provider
+ """Fetch all categories for a specific stream type from the provider.
Args:
- stream_type (str): Stream type can be Live, VOD, Series
-
- Returns:
- [type]: JSON if successful, otherwise None
+ stream_type (str): Either 'Live', 'VOD', or 'Series'.
"""
url = ""
if stream_type == self.live_type:
@@ -1137,13 +1153,10 @@ def _load_categories_from_provider(self, stream_type: str):
# GET Streams
def _load_streams_from_provider(self, stream_type: str):
- """Get from provider all streams for specific stream type
+ """Fetch all streams for a specific stream type from the provider.
Args:
- stream_type (str): Stream type can be Live, VOD, Series
-
- Returns:
- [type]: JSON if successful, otherwise None
+ stream_type (str): Either 'Live', 'VOD', or 'Series'.
"""
url = ""
if stream_type == self.live_type:
@@ -1159,14 +1172,11 @@ def _load_streams_from_provider(self, stream_type: str):
# GET Streams by Category
def _load_streams_by_category_from_provider(self, stream_type: str, category_id):
- """Get from provider all streams for specific stream type with category/group ID
+ """Fetch streams within a specific category from the provider.
Args:
- stream_type (str): Stream type can be Live, VOD, Series
- category_id ([type]): Category/Group ID.
-
- Returns:
- [type]: JSON if successful, otherwise None
+ stream_type (str): Either 'Live', 'VOD', or 'Series'.
+ category_id (int|str): The unique ID of the category.
"""
url = ""
@@ -1183,14 +1193,11 @@ def _load_streams_by_category_from_provider(self, stream_type: str, category_id)
# GET SERIES Info
def _load_series_info_by_id_from_provider(self, series_id: str, return_type: str = "DICT"):
- """Gets information about a Serie
+ """Fetch detailed information about a series from the provider.
Args:
- series_id (str): Serie ID as described in Group
- return_type (str, optional): Output format, 'DICT' or 'JSON'. Defaults to "DICT".
-
- Returns:
- [type]: JSON if successful, otherwise None
+ series_id (str): The unique series ID.
+ return_type (str, optional): The format, 'DICT' or 'JSON'. Defaults to "DICT".
"""
data = self._get_request(api.get_series_info_URL_by_ID(series_id, self.base_url))
if return_type == "JSON":
@@ -1205,21 +1212,43 @@ def _load_series_info_by_id_from_provider(self, series_id: str, return_type: str
# GET VOD Info
def vodInfoByID(self, vod_id):
+ """Fetch VOD information by movie ID.
+
+ Args:
+ vod_id (int|str): The movie ID.
+ """
return self._get_request(api.get_VOD_info_URL_by_ID(vod_id, self.base_url), self.base_url)
# GET short_epg for LIVE Streams (same as stalker portal,
# prints the next X EPG that will play soon)
def liveEpgByStream(self, stream_id):
+ """Fetch current short EPG data for a live stream.
+
+ Args:
+ stream_id (int|str): The stream ID.
+ """
return self._get_request(api.get_live_epg_URL_by_stream(stream_id, self.base_url))
def liveEpgByStreamAndLimit(self, stream_id, limit):
+ """Fetch short EPG data for a live stream with a result limit.
+
+ Args:
+ stream_id (int|str): The stream ID.
+ limit (int): Maximum number of entries.
+ """
return self._get_request(api.get_live_epg_URL_by_stream_and_limit(stream_id, limit, self.base_url))
# GET ALL EPG for LIVE Streams (same as stalker portal,
# but it will print all epg listings regardless of the day)
def allLiveEpgByStream(self, stream_id):
+ """Fetch all available EPG data for a live stream via simple_data_table.
+
+ Args:
+ stream_id (int|str): The stream ID.
+ """
return self._get_request(api.get_all_live_epg_URL_by_stream(stream_id, self.base_url))
# Full EPG List for all Streams
def allEpg(self):
+ """Fetch the complete XMLTV EPG for all channels."""
return self._get_request(api.get_all_epg_URL(self.base_url, self.username, self.password))
diff --git a/pyxtream/rest_api.py b/pyxtream/rest_api.py
index a363646..c99c490 100644
--- a/pyxtream/rest_api.py
+++ b/pyxtream/rest_api.py
@@ -9,6 +9,7 @@
from flask import Flask
from flask import Response as FlaskResponse
+from pyxtream.constants import DEFAULT_FLASK_PORT
class EndpointAction(object):
@@ -29,10 +30,12 @@ def __call__(self, **args):
# Add handlers here
"stream_search_generic": lambda: self._handle_search(args['term']),
"stream_search_with_type": lambda: self._handle_search(args['term'], args.get('type')),
- "download_stream": lambda: self.action(str(args['stream_type']), int(args['stream_id'])),
+ "download_stream": lambda: self.action(int(args['stream_id'])),
"get_download_progress": lambda: self.action(int(args['stream_id'])),
"get_last_7days": lambda: self.action(),
+ "get_last_30days": lambda: self.action(),
"home": lambda: self.action,
+ "get_state": lambda: self.action(),
"get_series": lambda: self.action(int(args['series_id']), "JSON")
}
@@ -60,7 +63,7 @@ class FlaskWrap(Thread):
port: int = 0
def __init__(self, name, xtream: object, html_template_folder: str = "",
- host: str = "0.0.0.0", port: int = 5000, debug: bool = True
+ host: str = "0.0.0.0", port: int = DEFAULT_FLASK_PORT, debug: bool = True
):
log = logging.getLogger('werkzeug')
@@ -107,10 +110,18 @@ def __init__(self, name, xtream: object, html_template_folder: str = "",
endpoint_name='get_last_7days',
handler=[self.xt.get_last_7days, "get_last_7days"]
)
+ self.add_endpoint(endpoint='/get_last_30days',
+ endpoint_name='get_last_30days',
+ handler=[self.xt.get_last_30days, "get_last_30days"]
+ )
self.add_endpoint(endpoint='/get_series/',
endpoint_name='get_series',
handler=[self.xt._load_series_info_by_id_from_provider, "get_series"]
)
+ self.add_endpoint(endpoint='/get_state',
+ endpoint_name='get_state',
+ handler=[self.xt.get_state, "get_state"]
+ )
def run(self):
self.app.run(debug=self.debug, use_reloader=False, host=self.host, port=self.port)
diff --git a/pyxtream/schemaValidator.py b/pyxtream/schemaValidator.py
index 174121d..48a3eed 100644
--- a/pyxtream/schemaValidator.py
+++ b/pyxtream/schemaValidator.py
@@ -292,11 +292,13 @@ def schemaValidator(jsonData: Any, schemaType: SchemaType) -> bool:
elif (schemaType == SchemaType.GROUP):
json_schema = group_schema
else:
- json_schema = "{}"
+ return False
try:
validate(instance=jsonData, schema=json_schema)
except exceptions.ValidationError as err:
print(err)
return False
+ except exceptions.SchemaError:
+ return False
return True
diff --git a/pyxtream/version.py b/pyxtream/version.py
index 20002f6..5915446 100644
--- a/pyxtream/version.py
+++ b/pyxtream/version.py
@@ -1,4 +1,4 @@
-__version__ = '0.8.0'
+__version__ = '0.9.0'
__author__ = 'Claudio Olmi'
__author_email__ = 'superolmo2@gmail.com'
diff --git a/run_tests.sh b/run_tests.sh
index 19d2e3d..ca98df5 100755
--- a/run_tests.sh
+++ b/run_tests.sh
@@ -1 +1 @@
-poetry run pytest --cov=pyxtream test/test_pyxtream.py
\ No newline at end of file
+poetry run pytest --cov=pyxtream test/test_pyxtream.py
diff --git a/test/test_pyxtream.py b/test/test_pyxtream.py
index b37803b..32764bc 100644
--- a/test/test_pyxtream.py
+++ b/test/test_pyxtream.py
@@ -3,13 +3,16 @@
import json
import os
import sys
+import requests
+import time
from datetime import datetime, timedelta
from unittest.mock import Mock, mock_open, patch
import pytest
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-from pyxtream import Channel, Episode, Group, Season, Serie, XTream
+from pyxtream import Channel, Episode, Group, Season, Serie, XTream, constants
+from pyxtream.schemaValidator import SchemaType, schemaValidator
# Mock data for provider connection
mock_provider_name = "Test Provider"
@@ -88,6 +91,7 @@ def mock_xtream(tmp_path_factory):
def test_authentication(mock_xtream):
assert mock_xtream.state["authenticated"] is True
+ assert mock_xtream.state["offline"] is False
assert mock_xtream.authorization["username"] == mock_provider_username
assert mock_xtream.authorization["password"] == mock_provider_password
@@ -262,10 +266,81 @@ def test_download_video(mock_xtream):
mock_xtream.movies = [movie]
with patch.object(mock_xtream, '_download_video_impl', return_value=True):
- path = mock_xtream.download_video("movie", 2)
+ # Updated to use the new single-argument signature
+ path = mock_xtream.download_video(2)
assert "movie 1.mp4" in path
+def test_offline_fallback_authentication(tmp_path):
+ """Test that if connection fails, it falls back to offline mode if cache exists."""
+ cache_dir = tmp_path / "fallback_cache"
+ cache_dir.mkdir()
+
+ provider_name = "FallbackProvider"
+ # Create a dummy cache file so _fallback_to_offline finds valid data
+ dummy_cache_file = cache_dir / "fallbackprovider-all_groups_Live.json"
+ dummy_cache_file.write_text(json.dumps([]))
+
+ # Mock connection failure and reduce max attempts to speed up the test
+ with patch('requests.get', side_effect=requests.exceptions.ConnectionError), \
+ patch('pyxtream.pyxtream.AUTH_MAX_ATTEMPTS', 1):
+
+ xt = XTream(
+ provider_name=provider_name,
+ provider_username="offline_user",
+ provider_password="offline_password",
+ provider_url="http://offline.server",
+ cache_path=str(cache_dir)
+ )
+
+ assert xt.state["authenticated"] is True
+ assert xt.state["offline"] is True
+ assert xt.authorization["username"] == "offline_user"
+ assert "player_api.php" in xt.base_url
+
+
+def test_authentication_total_failure(tmp_path):
+ """Test that if connection fails and NO cache exists, authentication is False."""
+ cache_dir = tmp_path / "empty_cache"
+ cache_dir.mkdir()
+
+ with patch('requests.get', side_effect=requests.exceptions.ConnectionError), \
+ patch('pyxtream.pyxtream.AUTH_MAX_ATTEMPTS', 1):
+
+ xt = XTream(
+ provider_name="FailingProvider",
+ provider_username="user",
+ provider_password="pass",
+ provider_url="http://fail.server",
+ cache_path=str(cache_dir)
+ )
+
+ assert xt.state["authenticated"] is False
+ assert xt.state["offline"] is False
+
+
+def test_offline_mode_ignores_age(tmp_path):
+ """Test that offline mode forces loading files even if they are technically 'stale'."""
+ cache_dir = tmp_path / "stale_cache"
+ cache_dir.mkdir()
+
+ filename = "stale-all_groups_Live.json"
+ full_path = cache_dir / filename
+ dummy_data = [{"category_id": "1", "category_name": "Stale Group"}]
+ full_path.write_text(json.dumps(dummy_data))
+
+ # Create an offline instance
+ with patch('requests.get', side_effect=requests.exceptions.ConnectionError), \
+ patch('pyxtream.pyxtream.AUTH_MAX_ATTEMPTS', 1):
+ xt = XTream("stale", "u", "p", "http://s", cache_path=str(cache_dir), reload_time_sec=10)
+ xt.state["offline"] = True # Ensure offline is true
+
+ # Even if threshold is 10s and file is theoretically stale (default behavior),
+ # it should load because state['offline'] is True.
+ loaded_data = xt._load_from_file("all_groups_Live.json")
+ assert loaded_data == dummy_data
+
+
def test_download_video_impl_resume(mock_xtream):
url = "http://test.com/video.ts"
filename = os.path.join(mock_xtream.cache_path, "test.ts")
@@ -307,7 +382,190 @@ def test_epg_and_info_helpers(mock_xtream):
assert mock_xtream.allEpg() == {"data": "test"}
+def test_get_state(mock_xtream):
+ state = json.loads(mock_xtream.get_state())
+ assert "offline" in state
+ assert state["authenticated"] is True
+
+
def test_get_last_7days(mock_xtream):
mock_xtream.movies_7days = [Channel(mock_xtream, "VOD", MOCK_STREAMS[1])]
res = json.loads(mock_xtream.get_last_7days())
assert len(res) == 1
+
+
+def test_get_download_progress_validation(mock_xtream: XTream) -> None:
+ """Verify that download progress returns zeroed data for mismatched stream IDs.
+
+ This test ensures that when a client polls for a specific stream_id that is not
+ currently being downloaded, the API returns a safe, zeroed-out state rather
+ than stale progress from a different stream.
+
+ Args:
+ mock_xtream (XTream): The mocked XTream client instance.
+ """
+ # Setup active progress for a specific stream
+ mock_xtream.download_progress = {'StreamId': 123, 'Total': 1000, 'Progress': 500}
+
+ # Requesting progress for a mismatched ID should return reset values
+ mismatched_res = json.loads(mock_xtream.get_download_progress(999))
+ assert mismatched_res['StreamId'] == 999
+ assert mismatched_res['Total'] == 0
+ assert mismatched_res['Progress'] == 0
+
+ # Requesting progress for the matching ID should return actual values
+ matching_res = json.loads(mock_xtream.get_download_progress(123))
+ assert matching_res['Progress'] == 500
+ assert matching_res['Total'] == 1000
+
+
+def test_search_stream_performance_large_dataset(mock_xtream: XTream) -> None:
+ """Benchmark search_stream performance with a dataset of 400,000 items.
+
+ This test populates the XTream instance with a massive number of mock channels
+ and movies to verify that the linear search remains within an acceptable
+ latency threshold.
+
+ Args:
+ mock_xtream (XTream): The mocked XTream client instance.
+ """
+ # Create lightweight mock data
+ base_info = {
+ "stream_id": 1, "stream_icon": "", "stream_type": "movie",
+ "category_id": "1", "added": "1638316800", "container_extension": "mp4"
+ }
+
+ # Efficiently populate 400k items
+ large_movies = []
+ for i in range(200000):
+ info = base_info.copy()
+ info["name"] = f"Movie Number {i}"
+ large_movies.append(Channel(mock_xtream, "VOD", info))
+
+ large_channels = []
+ for i in range(200000):
+ info = base_info.copy()
+ info["name"] = f"Live Channel {i}"
+ info["stream_type"] = "live"
+ large_channels.append(Channel(mock_xtream, "Live", info))
+
+ # Swap current collections with the large ones
+ original_movies = mock_xtream.movies
+ original_channels = mock_xtream.channels
+ mock_xtream.movies = large_movies
+ mock_xtream.channels = large_channels
+
+ try:
+ start_time = time.perf_counter()
+ results = mock_xtream.search_stream("Movie Number 199999", return_type="LIST")
+ duration = time.perf_counter() - start_time
+
+ assert len(results) == 1
+ # Threshold of 2.0 seconds is generous for 400k items in Python
+ assert duration < 2.0, f"Search took too long: {duration:.4f}s"
+ finally:
+ # Restore original state
+ mock_xtream.movies = original_movies
+ mock_xtream.channels = original_channels
+
+
+def test_schema_validation():
+ """Ensure the schema validator correctly identifies valid and invalid data."""
+ # 1. Valid Group (Sanity Check)
+ valid_group = {"category_id": "1", "category_name": "Test Group", "parent_id": 0}
+ assert schemaValidator(valid_group, SchemaType.GROUP) is True
+
+ # 2. Invalid Series Info (Missing required field 'name')
+ # According to series_info_schema, 'name' and 'category_id' are required.
+ invalid_series = {"category_id": "10"}
+ assert schemaValidator(invalid_series, SchemaType.SERIES_INFO) is False
+
+ # 3. Invalid Live Stream (Type mismatch)
+ # live_schema expects 'num' to be an integer, not a string
+ invalid_live = {
+ "num": "not_an_int",
+ "name": "Invalid Channel",
+ "stream_type": "live",
+ "stream_id": 100
+ }
+ assert schemaValidator(invalid_live, SchemaType.LIVE) is False
+
+ # 4. Unknown Schema Type (Edge case)
+ assert schemaValidator({}, "NON_EXISTENT_TYPE") is False
+
+
+def test_multiple_instances_isolation(tmp_path):
+ """Test that 4 instances of the XTream class are fully isolated when used at the same time."""
+ configs = []
+ # 1. Define 4 distinct configurations
+ for i in range(4):
+ configs.append({
+ "name": f"Provider {i}",
+ "url": f"http://server{i}.com",
+ "user": f"user{i}",
+ "pass": f"pass{i}",
+ "cache": str(tmp_path / f"cache{i}"),
+ "auth_data": {
+ "user_info": {
+ "username": f"user{i}",
+ "password": f"pass{i}",
+ "exp_date": str(int((datetime.now() + timedelta(days=30)).timestamp()))
+ },
+ "server_info": {"url": f"server{i}.com", "https_port": "443"}
+ }
+ })
+
+ instances = []
+ # 2. Mock requests.get to handle different URLs based on the user/pass credentials
+ with patch('requests.get') as mock_get:
+ def side_effect(url, **kwargs):
+ for c in configs:
+ if c["user"] in url and c["pass"] in url:
+ resp = Mock()
+ resp.ok = True
+ resp.json.return_value = c["auth_data"]
+ return resp
+ return Mock(ok=False, status_code=401)
+
+ mock_get.side_effect = side_effect
+
+ # 3. Create 4 instances
+ for c in configs:
+ # Ensure the directory exists so XTream doesn't reject the custom path
+ os.makedirs(c["cache"], exist_ok=True)
+ instances.append(XTream(
+ provider_name=c["name"],
+ provider_username=c["user"],
+ provider_password=c["pass"],
+ provider_url=c["url"],
+ cache_path=c["cache"]
+ ))
+
+ # 4. Verify isolation
+ for i in range(4):
+ inst = instances[i]
+ config = configs[i]
+ assert inst.name == config["name"]
+ assert inst.username == config["user"]
+ assert inst.cache_path == config["cache"]
+ assert inst.authorization["username"] == config["user"]
+ assert inst.state["authenticated"] is True
+
+ # Verify that modifying mutable collections in one instance doesn't affect others
+ inst.groups.append(f"unique_to_{i}")
+ inst.state[f"flag_{i}"] = True
+
+ # Test catch-all group isolation
+ # Create a dummy channel and add it to the catch-all group of this instance
+ dummy_channel = Channel(inst, "dummy", {
+ "stream_id": "99", "name": "N", "stream_icon": "http://i.com",
+ "stream_type": "live", "added": "1638316800"
+ })
+ inst.live_catch_all_group.channels.append(dummy_channel)
+
+ for j in range(4):
+ if i != j:
+ assert f"unique_to_{i}" not in instances[j].groups
+ assert f"flag_{i}" not in instances[j].state
+ # Check that the dummy channel is NOT found in other instances' groups
+ assert dummy_channel not in instances[j].live_catch_all_group.channels