KekikStream 0.3.3__py3-none-any.whl → 0.3.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,6 +9,7 @@ import sys
9
9
 
10
10
  def pypi_kontrol_guncelle(paket_adi: str):
11
11
  try:
12
+ konsol.print(f"[bold cyan] {paket_adi} Güncellemesi kontrol ediliyor...[/bold cyan]")
12
13
  mevcut_surum = get_distribution(paket_adi).version
13
14
  konsol.print(Panel(f"[cyan]Yüklü sürüm:[/cyan] [bold yellow]{mevcut_surum}[/bold yellow]"))
14
15
 
KekikStream/__init__.py CHANGED
@@ -1,258 +1,246 @@
1
1
  # Bu araç @keyiflerolsun tarafından | @KekikAkademi için yazılmıştır.
2
2
 
3
- from .CLI import konsol, cikis_yap, hata_yakala
3
+ from .CLI import konsol, cikis_yap, hata_yakala, pypi_kontrol_guncelle
4
4
  from .Managers import PluginManager, ExtractorManager, UIManager, MediaManager
5
5
  from .Core import PluginBase, ExtractorBase, SeriesInfo
6
6
  from asyncio import run
7
7
 
8
8
  class KekikStream:
9
9
  def __init__(self):
10
- self.plugin_manager = PluginManager()
11
- self.extractor_manager = ExtractorManager()
12
- self.ui_manager = UIManager()
13
- self.media_manager = MediaManager()
14
- self.current_plugin:PluginBase = None
15
-
16
- async def run(self):
17
- self.ui_manager.clear_console()
10
+ self.eklentiler_yonetici = PluginManager()
11
+ self.cikaricilar_yonetici = ExtractorManager()
12
+ self.arayuz_yonetici = UIManager()
13
+ self.medya_yonetici = MediaManager()
14
+ self.suanki_eklenti: PluginBase = None
15
+
16
+ async def calistir(self):
17
+ self.arayuz_yonetici.clear_console()
18
18
  konsol.rule("[bold cyan]KekikStream Başlatılıyor[/bold cyan]")
19
- if not self.plugin_manager.get_plugin_names():
19
+ if not self.eklentiler_yonetici.get_plugin_names():
20
20
  konsol.print("[bold red]Hiçbir eklenti bulunamadı![/bold red]")
21
21
  return
22
22
 
23
23
  try:
24
- await self.select_plugin()
24
+ await self.eklenti_sec()
25
25
  finally:
26
- await self.plugin_manager.close_plugins()
26
+ await self.eklentiler_yonetici.close_plugins()
27
27
 
28
- async def handle_no_results(self):
29
- action = await self.ui_manager.select_from_list(
28
+ async def hicbir_sonuc_bulunamazsa(self):
29
+ secim = await self.arayuz_yonetici.select_from_list(
30
30
  message = "Ne yapmak istersiniz?",
31
- choices = ["Geri Git", "Ana Menü", "Çıkış"]
31
+ choices = ["Tüm Eklentilerde Ara", "Ana Menü", "Çıkış"]
32
32
  )
33
33
 
34
- match action:
35
- case "Geri Git":
36
- await self.search_all()
34
+ match secim:
35
+ case "Tüm Eklentilerde Ara":
36
+ await self.tum_eklentilerde_ara()
37
37
  case "Ana Menü":
38
- await self.run()
38
+ await self.calistir()
39
39
  case "Çıkış":
40
40
  cikis_yap(False)
41
41
 
42
- async def select_plugin(self):
43
- plugin_name = await self.ui_manager.select_from_fuzzy(
42
+ async def eklenti_sec(self):
43
+ eklenti_adi = await self.arayuz_yonetici.select_from_fuzzy(
44
44
  message = "Arama yapılacak eklentiyi seçin:",
45
- choices = ["Tüm Eklentilerde Ara", *self.plugin_manager.get_plugin_names()]
45
+ choices = ["Tüm Eklentilerde Ara", *self.eklentiler_yonetici.get_plugin_names()]
46
46
  )
47
47
 
48
- if plugin_name == "Tüm Eklentilerde Ara":
49
- await self.search_all()
48
+ if eklenti_adi == "Tüm Eklentilerde Ara":
49
+ await self.tum_eklentilerde_ara()
50
50
  else:
51
- self.current_plugin = self.plugin_manager.select_plugin(plugin_name)
52
- await self.search_single_plugin()
51
+ self.suanki_eklenti = self.eklentiler_yonetici.select_plugin(eklenti_adi)
52
+ await self.eklenti_ile_ara()
53
53
 
54
- async def search_single_plugin(self):
55
- self.ui_manager.clear_console()
56
- konsol.rule(f"[bold cyan]{self.current_plugin.name} Eklentisinde Arama Yapın[/bold cyan]")
54
+ async def eklenti_ile_ara(self):
55
+ self.arayuz_yonetici.clear_console()
56
+ konsol.rule(f"[bold cyan]{self.suanki_eklenti.name} Eklentisinde Arama Yapın[/bold cyan]")
57
57
 
58
- query = await self.ui_manager.prompt_text("Arama sorgusu girin:")
59
- results = await self.current_plugin.search(query)
58
+ sorgu = await self.arayuz_yonetici.prompt_text("Arama sorgusu girin:")
59
+ sonuclar = await self.suanki_eklenti.search(sorgu)
60
60
 
61
- if not results:
61
+ if not sonuclar:
62
62
  konsol.print("[bold red]Arama sonucu bulunamadı![/bold red]")
63
- return await self.handle_no_results()
63
+ return await self.hicbir_sonuc_bulunamazsa()
64
64
 
65
- selected_result = await self.select_result(results)
65
+ if secilen_sonuc:= await self.sonuc_sec(sonuclar) :
66
+ await self.detaylari_goster({"plugin": self.suanki_eklenti.name, "url": secilen_sonuc})
66
67
 
67
- if selected_result:
68
- await self.show_details({"plugin": self.current_plugin.name, "url": selected_result})
69
-
70
- async def search_all(self):
71
- self.ui_manager.clear_console()
68
+ async def tum_eklentilerde_ara(self):
69
+ self.arayuz_yonetici.clear_console()
72
70
  konsol.rule("[bold cyan]Tüm Eklentilerde Arama Yapın[/bold cyan]")
73
71
 
74
- query = await self.ui_manager.prompt_text("Arama sorgusu girin:")
75
- results = await self.search_all_plugins(query)
72
+ sorgu = await self.arayuz_yonetici.prompt_text("Arama sorgusu girin:")
73
+ sonuclar = await self.tum_eklentilerde_arama(sorgu)
76
74
 
77
- if not results:
78
- return await self.handle_no_results()
75
+ if not sonuclar:
76
+ return await self.hicbir_sonuc_bulunamazsa()
79
77
 
80
- selected_result = await self.select_from_all_results(results)
78
+ secilen_sonuc = await self.tum_sonuc_sec(sonuclar)
81
79
 
82
- if selected_result:
83
- await self.show_details(selected_result)
80
+ if secilen_sonuc:
81
+ await self.detaylari_goster(secilen_sonuc)
84
82
 
85
- async def select_result(self, results):
86
- selected_url = await self.ui_manager.select_from_fuzzy(
87
- message = "İçerik sonuçlarından birini seçin:",
88
- choices = [{"name": res.title, "value": res.url} for res in results]
83
+ async def sonuc_sec(self, sonuclar):
84
+ return await self.arayuz_yonetici.select_from_fuzzy(
85
+ message = "İçerik sonuclarından birini seçin:",
86
+ choices = [{"name": sonuc.title, "value": sonuc.url} for sonuc in sonuclar]
89
87
  )
90
88
 
91
- if selected_url:
92
- return selected_url
93
-
94
- async def show_details(self, selected_result):
89
+ async def detaylari_goster(self, secilen_sonuc):
95
90
  try:
96
- if isinstance(selected_result, dict) and "plugin" in selected_result:
97
- plugin_name = selected_result["plugin"]
98
- url = selected_result["url"]
91
+ if isinstance(secilen_sonuc, dict) and "plugin" in secilen_sonuc:
92
+ eklenti_adi = secilen_sonuc["plugin"]
93
+ url = secilen_sonuc["url"]
99
94
 
100
- self.current_plugin = self.plugin_manager.select_plugin(plugin_name)
95
+ self.suanki_eklenti = self.eklentiler_yonetici.select_plugin(eklenti_adi)
101
96
  else:
102
- url = selected_result
97
+ url = secilen_sonuc
103
98
 
104
- media_info = await self.current_plugin.load_item(url)
99
+ medya_bilgi = await self.suanki_eklenti.load_item(url)
105
100
  except Exception as hata:
106
- konsol.log(selected_result)
101
+ konsol.log(secilen_sonuc)
107
102
  hata_yakala(hata)
108
103
  return
109
104
 
110
- self.media_manager.set_title(f"{self.current_plugin.name} | {media_info.title}")
105
+ self.medya_yonetici.set_title(f"{self.suanki_eklenti.name} | {medya_bilgi.title}")
106
+ self.arayuz_yonetici.display_media_info(f"{self.suanki_eklenti.name} | {medya_bilgi.title}", medya_bilgi)
111
107
 
112
- self.ui_manager.display_media_info(f"{self.current_plugin.name} | {media_info.title}", media_info)
113
-
114
- if isinstance(media_info, SeriesInfo):
115
- selected_episode = await self.ui_manager.select_from_fuzzy(
108
+ if isinstance(medya_bilgi, SeriesInfo):
109
+ secilen_bolum = await self.arayuz_yonetici.select_from_fuzzy(
116
110
  message = "İzlemek istediğiniz bölümü seçin:",
117
111
  choices = [
118
- {"name": f"{episode.season}. Sezon {episode.episode}. Bölüm - {episode.title}", "value": episode.url}
119
- for episode in media_info.episodes
112
+ {"name": f"{bolum.season}. Sezon {bolum.episode}. Bölüm - {bolum.title}", "value": bolum.url}
113
+ for bolum in medya_bilgi.episodes
120
114
  ]
121
115
  )
122
- if selected_episode:
123
- links = await self.current_plugin.load_links(selected_episode)
124
- await self.show_options(links)
116
+ if secilen_bolum:
117
+ baglantilar = await self.suanki_eklenti.load_links(secilen_bolum)
118
+ await self.secenekleri_goster(baglantilar)
125
119
  else:
126
- links = await self.current_plugin.load_links(media_info.url)
127
- await self.show_options(links)
120
+ baglantilar = await self.suanki_eklenti.load_links(medya_bilgi.url)
121
+ await self.secenekleri_goster(baglantilar)
128
122
 
129
- async def show_options(self, links):
130
- if not links:
123
+ async def secenekleri_goster(self, baglantilar):
124
+ if not baglantilar:
131
125
  konsol.print("[bold red]Hiçbir bağlantı bulunamadı![/bold red]")
132
- return await self.handle_no_results()
126
+ return await self.hicbir_sonuc_bulunamazsa()
133
127
 
134
- mapping = self.extractor_manager.map_links_to_extractors(links)
135
- has_play_method = hasattr(self.current_plugin, "play") and callable(getattr(self.current_plugin, "play", None))
128
+ haritalama = self.cikaricilar_yonetici.map_links_to_extractors(baglantilar)
129
+ play_fonksiyonu_var = hasattr(self.suanki_eklenti, "play") and callable(getattr(self.suanki_eklenti, "play", None))
136
130
  # ! DEBUG
137
- # konsol.print(links)
138
- if not mapping and not has_play_method:
131
+ # konsol.print(baglantilar)
132
+ if not haritalama and not play_fonksiyonu_var:
139
133
  konsol.print("[bold red]Hiçbir Extractor bulunamadı![/bold red]")
140
- konsol.print(links)
141
- return await self.handle_no_results()
134
+ konsol.print(baglantilar)
135
+ return await self.hicbir_sonuc_bulunamazsa()
142
136
 
143
- if not mapping:
144
- selected_link = await self.ui_manager.select_from_list(
137
+ if not haritalama:
138
+ secilen_link = await self.arayuz_yonetici.select_from_list(
145
139
  message = "Doğrudan oynatmak için bir bağlantı seçin:",
146
- choices = [{"name": self.current_plugin.name, "value": link} for link in links]
140
+ choices = [{"name": self.suanki_eklenti.name, "value": link} for link in baglantilar]
147
141
  )
148
- if selected_link:
149
- await self.play_media(selected_link)
142
+ if secilen_link:
143
+ await self.medya_oynat(secilen_link)
150
144
  return
151
145
 
152
- action = await self.ui_manager.select_from_list(
146
+ secim = await self.arayuz_yonetici.select_from_list(
153
147
  message = "Ne yapmak istersiniz?",
154
- choices = ["İzle", "Geri Git", "Ana Menü"]
148
+ choices = ["İzle", "Tüm Eklentilerde Ara", "Ana Menü"]
155
149
  )
156
150
 
157
- match action:
151
+ match secim:
158
152
  case "İzle":
159
- selected_link = await self.ui_manager.select_from_list(
160
- message = "İzlemek için bir bağlantı seçin:",
161
- choices = [{"name": extractor_name, "value": link} for link, extractor_name in mapping.items()]
153
+ secilen_link = await self.arayuz_yonetici.select_from_list(
154
+ message = "İzlemek için bir bağlantı seçin:",
155
+ choices = [{"name": cikarici_adi, "value": link} for link, cikarici_adi in haritalama.items()]
162
156
  )
163
- if selected_link:
164
- await self.play_media(selected_link)
157
+ if secilen_link:
158
+ await self.medya_oynat(secilen_link)
165
159
 
166
- case "Geri Git":
167
- await self.search_all()
160
+ case "Tüm Eklentilerde Ara":
161
+ await self.tum_eklentilerde_ara()
168
162
 
169
163
  case _:
170
- await self.run()
171
-
172
- async def play_media(self, selected_link):
173
- if hasattr(self.current_plugin, "play") and callable(self.current_plugin.play):
174
- konsol.log(f"[yellow][»] Oynatılıyor : {selected_link}")
175
- await self.current_plugin.play(
176
- name = self.current_plugin._data[selected_link]["name"],
177
- url = selected_link,
178
- referer = self.current_plugin._data[selected_link]["referer"],
179
- subtitles = self.current_plugin._data[selected_link]["subtitles"]
164
+ await self.calistir()
165
+
166
+ async def medya_oynat(self, secilen_link):
167
+ if hasattr(self.suanki_eklenti, "play") and callable(self.suanki_eklenti.play):
168
+ konsol.log(f"[yellow][»] Oynatılıyor : {secilen_link}")
169
+ return await self.suanki_eklenti.play(
170
+ name = self.suanki_eklenti._data[secilen_link]["name"],
171
+ url = secilen_link,
172
+ referer = self.suanki_eklenti._data[secilen_link]["referer"],
173
+ subtitles = self.suanki_eklenti._data[secilen_link]["subtitles"]
180
174
  )
181
- return
182
175
 
183
- extractor: ExtractorBase = self.extractor_manager.find_extractor(selected_link)
184
- if not extractor:
185
- konsol.print("[bold red]Uygun Extractor bulunamadı.[/bold red]")
186
- return
176
+ cikarici: ExtractorBase = self.cikaricilar_yonetici.find_extractor(secilen_link)
177
+ if not cikarici:
178
+ return konsol.print("[bold red]Uygun Extractor bulunamadı.[/bold red]")
187
179
 
188
180
  try:
189
- extract_data = await extractor.extract(selected_link, referer=self.current_plugin.main_url)
181
+ extract_data = await cikarici.extract(secilen_link, referer=self.suanki_eklenti.main_url)
190
182
  except Exception as hata:
191
- konsol.print(f"[bold red]{extractor.name} » hata oluştu: {hata}[/bold red]")
192
- await self.handle_no_results()
193
- return
183
+ konsol.print(f"[bold red]{cikarici.name} » hata oluştu: {hata}[/bold red]")
184
+ return await self.hicbir_sonuc_bulunamazsa()
194
185
 
195
186
  if isinstance(extract_data, list):
196
- selected_data = await self.ui_manager.select_from_list(
187
+ secilen_data = await self.arayuz_yonetici.select_from_list(
197
188
  message = "Birden fazla bağlantı bulundu, lütfen birini seçin:",
198
189
  choices = [{"name": data.name, "value": data} for data in extract_data]
199
190
  )
200
191
  else:
201
- selected_data = extract_data
192
+ secilen_data = extract_data
202
193
 
203
- if selected_data.headers.get("Cookie"):
204
- self.media_manager.set_headers({"Cookie": selected_data.headers.get("Cookie")})
194
+ if secilen_data.headers.get("Cookie"):
195
+ self.medya_yonetici.set_headers({"Cookie": secilen_data.headers.get("Cookie")})
205
196
 
206
- self.media_manager.set_title(f"{self.media_manager.get_title()} | {selected_data.name}")
207
- self.media_manager.set_headers({"Referer": selected_data.referer})
208
- konsol.log(f"[yellow][»] Oynatılıyor : {selected_data.url}")
209
- self.media_manager.play_media(selected_data)
197
+ self.medya_yonetici.set_title(f"{self.medya_yonetici.get_title()} | {secilen_data.name}")
198
+ self.medya_yonetici.set_headers({"Referer": secilen_data.referer})
199
+ konsol.log(f"[yellow][»] Oynatılıyor : {secilen_data.url}")
200
+ self.medya_yonetici.play_media(secilen_data)
210
201
 
211
- async def search_all_plugins(self, query: str):
212
- all_results = []
202
+ async def tum_eklentilerde_arama(self, sorgu: str):
203
+ tum_sonuclar = []
213
204
 
214
- for plugin_name, plugin in self.plugin_manager.plugins.items():
215
- if not isinstance(plugin, PluginBase):
216
- konsol.print(f"[yellow][!] {plugin_name} geçerli bir PluginBase değil, atlanıyor...[/yellow]")
205
+ for eklenti_adi, eklenti in self.eklentiler_yonetici.plugins.items():
206
+ if not isinstance(eklenti, PluginBase):
207
+ konsol.print(f"[yellow][!] {eklenti_adi} geçerli bir PluginBase değil, atlanıyor...[/yellow]")
217
208
  continue
218
209
 
219
- konsol.log(f"[yellow][~] {plugin_name:<19} aranıyor...[/]")
210
+ konsol.log(f"[yellow][~] {eklenti_adi:<19} aranıyor...[/]")
220
211
  try:
221
- results = await plugin.search(query)
222
- if results:
223
- all_results.extend(
224
- [{"plugin": plugin_name, "title": result.title, "url": result.url, "poster": result.poster} for result in results]
212
+ sonuclar = await eklenti.search(sorgu)
213
+ if sonuclar:
214
+ tum_sonuclar.extend(
215
+ [{"plugin": eklenti_adi, "title": sonuc.title, "url": sonuc.url, "poster": sonuc.poster} for sonuc in sonuclar]
225
216
  )
226
217
  except Exception as hata:
227
- konsol.print(f"[bold red]{plugin_name} » hata oluştu: {hata}[/bold red]")
218
+ konsol.print(f"[bold red]{eklenti_adi} » hata oluştu: {hata}[/bold red]")
228
219
 
229
- if not all_results:
220
+ if not tum_sonuclar:
230
221
  konsol.print("[bold red]Hiçbir sonuç bulunamadı![/bold red]")
231
- await self.handle_no_results()
222
+ await self.hicbir_sonuc_bulunamazsa()
232
223
  return []
233
224
 
234
- return all_results
225
+ return tum_sonuclar
235
226
 
236
- async def select_from_all_results(self, results):
237
- choices = [
238
- {"name": f"{f'[{res["plugin"]}]':<21} » {res['title']}", "value": res}
239
- for res in results
227
+ async def tum_sonuc_sec(self, sonuclar):
228
+ secenekler = [
229
+ {"name": f"{f'[{sonuc["plugin"]}]':<21} » {sonuc['title']}", "value": sonuc}
230
+ for sonuc in sonuclar
240
231
  ]
241
232
 
242
- return await self.ui_manager.select_from_fuzzy(
243
- message = "Arama sonuçlarından bir içerik seçin:",
244
- choices = choices
233
+ return await self.arayuz_yonetici.select_from_fuzzy(
234
+ message = "Arama sonuclarından bir içerik seçin:",
235
+ choices = secenekler
245
236
  )
246
237
 
247
- from .CLI import pypi_kontrol_guncelle
248
-
249
238
  def basla():
250
239
  try:
251
- konsol.print("[bold cyan]Güncelleme kontrol ediliyor...[/bold cyan]")
252
240
  pypi_kontrol_guncelle("KekikStream")
253
241
 
254
242
  app = KekikStream()
255
- run(app.run())
243
+ run(app.calistir())
256
244
  cikis_yap(False)
257
245
  except KeyboardInterrupt:
258
246
  cikis_yap(True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: KekikStream
3
- Version: 0.3.3
3
+ Version: 0.3.5
4
4
  Summary: terminal üzerinden medya içeriği aramanızı ve VLC/MPV gibi popüler medya oynatıcılar aracılığıyla doğrudan izlemenizi sağlayan modüler ve genişletilebilir bir bıdı bıdı
5
5
  Home-page: https://github.com/keyiflerolsun/KekikStream
6
6
  Author: keyiflerolsun
@@ -1,8 +1,8 @@
1
- KekikStream/__init__.py,sha256=nzsNRqo1iXjS_rqf7Ct8cC7TPjcTofZcpYZ3FlDC0Zs,10354
1
+ KekikStream/__init__.py,sha256=rvxttmpyOKC4MSTv6n8ThVaVtl3XEKaJ4K_fVedWvEU,10453
2
2
  KekikStream/__main__.py,sha256=4U-NO1f0Mts5Mf_QnWhWqRbTsRBy2y2VPlpHyaqG9_I,137
3
3
  KekikStream/requirements.txt,sha256=gS_TUUQx5A7FUmRGxj2dQedxheD7qA6AswdUb2y_Ub8,70
4
4
  KekikStream/CLI/__init__.py,sha256=U6oLq_O7u5y2eHhBnmfhZNns_EqHHJXJmzl8jvZFUNY,230
5
- KekikStream/CLI/pypi_kontrol.py,sha256=K5EPhpAu4XYqhFsXKK27mUoiN7iiFRktR43XZmYKzzM,1423
5
+ KekikStream/CLI/pypi_kontrol.py,sha256=MchatOwCWCpFBtgt09yag9Rjal9XFyh2W_oVs2p7SNg,1518
6
6
  KekikStream/Core/ExtractorBase.py,sha256=-3jadehq2wIa4jwwn38ojkGHay2qAYgweSYIBqVGwNU,1068
7
7
  KekikStream/Core/ExtractorLoader.py,sha256=rrll3F2CyVmx3foa57PG0FocQMrFuMpdlG0Uf0-2Fz4,3915
8
8
  KekikStream/Core/ExtractorModels.py,sha256=huIcPQ5VIRfMx0LcL5SS1u4dldZbHjzHKEdSEtOPlc0,456
@@ -48,9 +48,9 @@ KekikStream/Plugins/JetFilmizle.py,sha256=DPdvTEns8r2MI9pHY8d9EEsUZmlQU7N2C9yr8o
48
48
  KekikStream/Plugins/SezonlukDizi.py,sha256=5BZVzQ2eQtymHxO0bzjA2ho4FFNahPFQly4hoHuH8lo,4441
49
49
  KekikStream/Plugins/SineWix.py,sha256=ZtcIwPW0ONGkSjT7Ye8b71RWdHZMUZefX-JTWu6uGSs,4854
50
50
  KekikStream/Plugins/UgurFilm.py,sha256=yYXee5uxwNnPqFJZ6s6cRkmUyqS3Vv8x-iesPalc4j4,2930
51
- KekikStream-0.3.3.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
52
- KekikStream-0.3.3.dist-info/METADATA,sha256=Mmln1g9uoz9U-N5qGAZ_w26MHGhhWElLZNhqv9HFuyU,3987
53
- KekikStream-0.3.3.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
54
- KekikStream-0.3.3.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
55
- KekikStream-0.3.3.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
56
- KekikStream-0.3.3.dist-info/RECORD,,
51
+ KekikStream-0.3.5.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
52
+ KekikStream-0.3.5.dist-info/METADATA,sha256=bX__FH-Oc-Jirv9-9Jkz3AtTJbV6JGXMsmMeQ6AeDNQ,3987
53
+ KekikStream-0.3.5.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
54
+ KekikStream-0.3.5.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
55
+ KekikStream-0.3.5.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
56
+ KekikStream-0.3.5.dist-info/RECORD,,