KekikStream 1.9.8__py3-none-any.whl → 2.0.0__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.
@@ -17,12 +17,13 @@ class ExtractorBase(ABC):
17
17
  self.cloudscraper = CloudScraper()
18
18
 
19
19
  # httpx - lightweight and safe for most HTTP requests
20
- self.httpx = AsyncClient(
21
- timeout = 3,
22
- follow_redirects = True
23
- )
20
+ self.httpx = AsyncClient(timeout = 10)
24
21
  self.httpx.headers.update(self.cloudscraper.headers)
25
22
  self.httpx.cookies.update(self.cloudscraper.cookies)
23
+ self.httpx.headers.update({
24
+ "User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:135.0) Gecko/20100101 Firefox/135.0",
25
+ "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
26
+ })
26
27
 
27
28
  def can_handle_url(self, url: str) -> bool:
28
29
  # URL'nin bu çıkarıcı tarafından işlenip işlenemeyeceğini kontrol et
@@ -19,19 +19,22 @@ class ExtractorLoader:
19
19
  def load_all(self) -> list[ExtractorBase]:
20
20
  extractors = []
21
21
 
22
- # Global çıkarıcıları yükle
23
- if self.global_extractors_dir.exists():
24
- # konsol.log(f"[green][*] Global Extractor dizininden yükleniyor: {self.global_extractors_dir}[/green]")
25
- global_extractors = self._load_from_directory(self.global_extractors_dir)
26
- # konsol.log(f"[green]Global Extractor'lar: {[e.__name__ for e in global_extractors]}[/green]")
27
- extractors.extend(global_extractors)
28
-
29
- # Yerel çıkarıcıları yükle
22
+ # Eğer yerel dizinde Extractor varsa, sadece onları yükle (eklenti geliştirme modu)
30
23
  if self.local_extractors_dir.exists():
31
24
  # konsol.log(f"[green][*] Yerel Extractor dizininden yükleniyor: {self.local_extractors_dir}[/green]")
32
25
  local_extractors = self._load_from_directory(self.local_extractors_dir)
33
26
  # konsol.log(f"[green]Yerel Extractor'lar: {[e.__name__ for e in local_extractors]}[/green]")
34
- extractors.extend(local_extractors)
27
+
28
+ if local_extractors:
29
+ # konsol.log("[cyan][*] Yerel Extractor bulundu, global Extractor'lar atlanıyor (eklenti geliştirme modu)[/cyan]")
30
+ extractors.extend(local_extractors)
31
+
32
+ # Yerel dizinde Extractor yoksa, global'leri yükle
33
+ if not extractors and self.global_extractors_dir.exists():
34
+ # konsol.log(f"[green][*] Global Extractor dizininden yükleniyor: {self.global_extractors_dir}[/green]")
35
+ global_extractors = self._load_from_directory(self.global_extractors_dir)
36
+ # konsol.log(f"[green]Global Extractor'lar: {[e.__name__ for e in global_extractors]}[/green]")
37
+ extractors.extend(global_extractors)
35
38
 
36
39
  # Benzersizliği sağlama (modül adı + sınıf adı bazında)
37
40
  unique_extractors = []
@@ -63,7 +63,7 @@ class ExtractorManager:
63
63
  """
64
64
  # Lazy loading: İlk kullanımda extractorları initialize et
65
65
  self._ensure_initialized()
66
-
66
+
67
67
  mapping = {}
68
68
  for link in links:
69
69
  # Cached instance'ları kullan
@@ -34,6 +34,10 @@ class PluginBase(ABC):
34
34
  )
35
35
  self.httpx.headers.update(self.cloudscraper.headers)
36
36
  self.httpx.cookies.update(self.cloudscraper.cookies)
37
+ self.httpx.headers.update({
38
+ "User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:135.0) Gecko/20100101 Firefox/135.0",
39
+ "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
40
+ })
37
41
 
38
42
  self.media_handler = MediaHandler()
39
43
  self.ex_manager = ExtractorManager()
@@ -19,15 +19,19 @@ class PluginLoader:
19
19
  def load_all(self) -> dict[str, PluginBase]:
20
20
  plugins = {}
21
21
 
22
- # Global eklentileri yükle
23
- if self.global_plugins_dir.exists():
24
- # konsol.log(f"[green][*] Global Eklenti dizininden yükleniyor: {self.global_plugins_dir}[/green]")
25
- plugins |= self._load_from_directory(self.global_plugins_dir)
26
-
27
- # Yerel eklentileri yükle
22
+ # Eğer yerel dizinde Plugin varsa, sadece onları yükle (eklenti geliştirme modu)
28
23
  if self.local_plugins_dir.exists():
29
24
  # konsol.log(f"[green][*] Yerel Eklenti dizininden yükleniyor: {self.local_plugins_dir}[/green]")
30
- plugins |= self._load_from_directory(self.local_plugins_dir)
25
+ local_plugins = self._load_from_directory(self.local_plugins_dir)
26
+
27
+ if local_plugins:
28
+ # konsol.log("[cyan][*] Yerel Plugin bulundu, global Plugin'ler atlanıyor (eklenti geliştirme modu)[/cyan]")
29
+ plugins |= local_plugins
30
+
31
+ # Yerel dizinde Plugin yoksa, global'leri yükle
32
+ if not plugins and self.global_plugins_dir.exists():
33
+ # konsol.log(f"[green][*] Global Eklenti dizininden yükleniyor: {self.global_plugins_dir}[/green]")
34
+ plugins |= self._load_from_directory(self.global_plugins_dir)
31
35
 
32
36
  if not plugins:
33
37
  konsol.print("[yellow][!] Yüklenecek bir Eklenti bulunamadı![/yellow]")
@@ -7,7 +7,7 @@ import re
7
7
  class SinemaCX(PluginBase):
8
8
  name = "SinemaCX"
9
9
  language = "tr"
10
- main_url = "https://www.sinema.onl"
10
+ main_url = "https://www.sinema.fit"
11
11
  favicon = f"https://www.google.com/s2/favicons?domain={main_url}&sz=64"
12
12
  description = "HD Film izle, Türkçe Dublaj ve Altyazılı filmler."
13
13
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: KekikStream
3
- Version: 1.9.8
3
+ Version: 2.0.0
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
@@ -235,6 +235,32 @@ KekikStream/
235
235
  3. `get_main_page`, `search`, `load_item`, `load_links` metodlarını implemente edin.
236
236
  4. Plugin'i test edin (örnek: `Tests/Single.py`).
237
237
 
238
+ ### 🔧 Geliştirme Modu
239
+
240
+ KekikStream, eklenti geliştiricileri için otomatik bir **geliştirme modu** sunar:
241
+
242
+ **Plugin Geliştirme:**
243
+ - Çalışma dizininde `Plugins/` klasörü oluşturup içine plugin dosyası eklerseniz, **sadece bu local plugin'ler** yüklenir
244
+ - Global plugin'ler (sisteme kurulu olanlar) otomatik olarak atlanır
245
+ - Bu sayede test sırasında diğer plugin'lerle karışma olmaz
246
+
247
+ **Extractor Geliştirme:**
248
+ - Çalışma dizininde `Extractors/` klasörü oluşturup içine extractor dosyası eklerseniz, **sadece bu local extractor'lar** yüklenir
249
+ - Global extractor'lar otomatik olarak atlanır
250
+ - Kendi extractor'ınızı izole bir ortamda test edebilirsiniz
251
+
252
+ **Örnek:**
253
+ ```bash
254
+ # Çalışma dizininizde
255
+ mkdir Plugins
256
+ touch Plugins/MyTestPlugin.py # Plugin'inizi yazın
257
+
258
+ # KekikStream'i çalıştırın - sadece MyTestPlugin yüklenecek
259
+ KekikStream
260
+ ```
261
+
262
+ > 💡 **Not:** Yerel dizinde herhangi bir Plugin/Extractor dosyası bulunmazsa, sistem normal şekilde global olanları yükler.
263
+
238
264
  ---
239
265
 
240
266
  ## 📊 Performans
@@ -4,14 +4,14 @@ KekikStream/requirements.txt,sha256=0fO-7byqgLMr4NyJO7fQBFOnLv0zcAeqk7tLhHXqonk,
4
4
  KekikStream/CLI/__init__.py,sha256=U6oLq_O7u5y2eHhBnmfhZNns_EqHHJXJmzl8jvZFUNY,230
5
5
  KekikStream/CLI/pypi_kontrol.py,sha256=q6fNs6EKJDc5VuUFig9DBzLzNPp_kMD1vOVgLElcii8,1487
6
6
  KekikStream/Core/__init__.py,sha256=ar2MZQF83ryfLfydEXcfjdwNe4Too_HT6bP-D_4TopA,710
7
- KekikStream/Core/Extractor/ExtractorBase.py,sha256=Yj7CGvm2ZKxlvuUkZu0X1Pl0JMH250W7hyqv09duTmE,1637
8
- KekikStream/Core/Extractor/ExtractorLoader.py,sha256=7uxUXTAuF65KKkmbI6iRiCiUhx-IqrronB7ixhchcTU,4289
9
- KekikStream/Core/Extractor/ExtractorManager.py,sha256=W8LkEl0TXLYvbF6PWw9Q0BEYs17UQiHHrEOqBDyB_Eg,2652
7
+ KekikStream/Core/Extractor/ExtractorBase.py,sha256=_9l0VIZpFHBdzVLI_hp1RQRf4CmsxrTt-FIKEaF1Z04,1824
8
+ KekikStream/Core/Extractor/ExtractorLoader.py,sha256=cYV2Cwzf6IdlglWrDK3LRK0aZO6pdMGTsXepIM6DO_E,4552
9
+ KekikStream/Core/Extractor/ExtractorManager.py,sha256=VYkj4CCE5Puqsr6PCeN8i_OS0hfYKI4NScj98BLO39o,2644
10
10
  KekikStream/Core/Extractor/ExtractorModels.py,sha256=Qj_gbIeGRewaZXNfYkTi4FFRRq6XBOc0HS0tXGDwajI,445
11
11
  KekikStream/Core/Media/MediaHandler.py,sha256=MEn3spPAThVloN3WcoCwWhpoyMA7tAZvcwYjmjJsX3U,7678
12
12
  KekikStream/Core/Media/MediaManager.py,sha256=AaUq2D7JSJIphjoAj2fjLOJjswm7Qf5hjYCbBdrbnDU,438
13
- KekikStream/Core/Plugin/PluginBase.py,sha256=uzJb8DqJfXOteteSBhG9QWUrFgb4JTByV_GbODz-9gs,3872
14
- KekikStream/Core/Plugin/PluginLoader.py,sha256=yZxMug-OcJ5RBm4fQkoquKrZxcBU7Pvt4IcY-d0WU8g,3393
13
+ KekikStream/Core/Plugin/PluginBase.py,sha256=xR1J6unUDpUNe_fHRtZSryEbAPdf-qdT3LpMsjT_kBk,4126
14
+ KekikStream/Core/Plugin/PluginLoader.py,sha256=GcDqN1u3nJeoGKH_oDFHCpwteJlLCxHNbmPrC5L-hZE,3692
15
15
  KekikStream/Core/Plugin/PluginManager.py,sha256=CZVg1eegi8vfMfccx0DRV0Box8kXz-aoULTQLgbPbvM,893
16
16
  KekikStream/Core/Plugin/PluginModels.py,sha256=Yvx-6Fkn8QCIcuqAkFbCP5EJcq3XBkK_P8S0tRNhS6E,2476
17
17
  KekikStream/Core/UI/UIManager.py,sha256=T4V_kdTTWa-UDamgLSKa__dWJuzcvRK9NuwBlzU9Bzc,1693
@@ -74,13 +74,13 @@ KekikStream/Plugins/SelcukFlix.py,sha256=WYVtGMxngpqrXk7PX_B4ya6Pji7dOjQsXoukk30
74
74
  KekikStream/Plugins/SezonlukDizi.py,sha256=dT2xPPkdaYV43qsL4Le_5Yel8eoPkHtnXIOXqz-Ya-c,6326
75
75
  KekikStream/Plugins/SineWix.py,sha256=xdTeg8GHUpyZsY6EQ5I1ZIT4-lB_qwBwvHQVmdMPpEI,7364
76
76
  KekikStream/Plugins/Sinefy.py,sha256=YMwG7ykdjzAY_GEvV4xv9NJ6ubew7qeMLz4KkvYpaNk,9749
77
- KekikStream/Plugins/SinemaCX.py,sha256=DUvYa7J4a2D5ivLO_sQiaStoV5FDxmz8onJyFwAidvY,7177
77
+ KekikStream/Plugins/SinemaCX.py,sha256=dEoZJJLnTgayBeCbGoR1qSUjrnTeRx5ZLck_dSPDL4c,7177
78
78
  KekikStream/Plugins/Sinezy.py,sha256=EttAZogKoKMP8RP_X1fSfi8vVxA2RWizwgnLkmnhERQ,5675
79
79
  KekikStream/Plugins/SuperFilmGeldi.py,sha256=Ohm21BPsJH_S1tx5i2APEgAOD25k2NiwRP7rSgAKvRs,5289
80
80
  KekikStream/Plugins/UgurFilm.py,sha256=eKGzmSi8k_QbXnYPWXZRdmCxxc32zZh4rynmdxCbm1o,4832
81
- kekikstream-1.9.8.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
82
- kekikstream-1.9.8.dist-info/METADATA,sha256=3iORwDJmRCU5O_63VpFX4Aj8p4rQ1TpkB0avs0lZCWE,9079
83
- kekikstream-1.9.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
84
- kekikstream-1.9.8.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
85
- kekikstream-1.9.8.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
86
- kekikstream-1.9.8.dist-info/RECORD,,
81
+ kekikstream-2.0.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
82
+ kekikstream-2.0.0.dist-info/METADATA,sha256=ec5QwOxhLLKAnYgw_zsy8HRqPjFGcng0jr9H0NE1iV4,10090
83
+ kekikstream-2.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
84
+ kekikstream-2.0.0.dist-info/entry_points.txt,sha256=dFwdiTx8djyehI0Gsz-rZwjAfZzUzoBSrmzRu9ubjJc,50
85
+ kekikstream-2.0.0.dist-info/top_level.txt,sha256=DNmGJDXl27Drdfobrak8KYLmocW_uznVYFJOzcjUgmY,12
86
+ kekikstream-2.0.0.dist-info/RECORD,,