clapp-pm 1.0.8__py3-none-any.whl → 1.0.9__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clapp-pm
3
- Version: 1.0.8
3
+ Version: 1.0.9
4
4
  Summary: Lightweight cross-language app manager for Python and Lua
5
5
  Home-page: https://github.com/mburakmmm/clapp
6
6
  Author: Melih Burak Memiş
@@ -2,13 +2,13 @@ check_env.py,sha256=5DJwdALpRe1TLbzF_Zta-zD312J065-pPmsJZ17xRDg,4425
2
2
  clapp_core.py,sha256=5tkzt7J4GKSv7Chv5Zoe9N0dv_sWlYGqYxmIn3dhEPY,1764
3
3
  clean_command.py,sha256=nmzitkdNo0Ovgi-tGPUxa9mkAIFzwEzGNaTm82MUdvw,6806
4
4
  cli_commands.py,sha256=7tXrBE0pPkuaFIbsIGXg3RxH7GwisL-Zz2N2oMGe2GQ,12682
5
- dependency_resolver.py,sha256=Dzrg2LvXYkmMYKgpafIFiZMIxDL4zTBjfQPuSB99bW0,16872
5
+ dependency_resolver.py,sha256=OyzWOW45OWTr8BX0gcy5fFbk9qIVBP9JQyMtXrKPmEM,24499
6
6
  doctor_command.py,sha256=jLnvpU9Oglq553bwgF7fhAcUChZTMD2Qle9ZxNHPefc,7680
7
7
  info_command.py,sha256=b74Pl1-x_PSezALx-lS3FkEcVNTF7a9McTKk5XTDhjM,5629
8
8
  install_command.py,sha256=Yj884DDYFANrCISg17-3zRQdwFaobHgvSjtemlUtEfw,9353
9
9
  installer.py,sha256=EkQ5Z1Cq_Z5u_Ssv2Nc8hryI5E97x4D1QVjSqEHe0dE,10619
10
10
  list_command.py,sha256=qbeocvrg2eXRklxbYS3audQhYHGXTlMBk_tNh1cMxd0,8391
11
- main.py,sha256=pt57hhDVj_rqGYR9Z4_lD8d9vZv0BVBFARSiV350OZI,14492
11
+ main.py,sha256=qunqz-FMwmnyat5bLP3YpZLkyCcEgL7vuUsY3UTDJpc,14493
12
12
  manifest_schema.py,sha256=IxfKuYgcIhILJrDMOm5vjSJn2jp7hPpUoxtjPMCPvbE,2201
13
13
  manifest_validator.py,sha256=MTI6c_sYfVakQ6aQUu5_qkukTh4H1FcSrT4uRdE6xIg,7990
14
14
  package_registry.py,sha256=Rco15cvz-6lpCEDdCzwGZNCKtvVhlFIsEPy-WFAESMM,4233
@@ -29,16 +29,16 @@ clapp-packages-repo/packages/test-app/main.py,sha256=rN4Zo9u53bIVjcUlul059knx6v-
29
29
  clapp-packages-repo/packages/test-app/manifest.json,sha256=kJe4sjYdPRNZD5hEeca80jj3lxeEWBMJoZ59RW7tiKI,118
30
30
  clapp-packages-repo/packages/test-app2/main.py,sha256=lHkbjTmehFY4VuYYF2dYiVBH7W0oqHHeY0I5W85iPTY,35
31
31
  clapp-packages-repo/packages/test-app2/manifest.json,sha256=vshXJrtRxBc_ISM6E8KT5BSmveMbjWszenlgxgSN86w,121
32
- clapp_pm-1.0.8.data/data/version.json,sha256=S7yOmQU4A-UqpUE3AX0vmjehgSS--fxuVEPG1YcIvDo,238
33
- clapp_pm-1.0.8.dist-info/licenses/LICENSE,sha256=_hryv9pKR6udRexceUYuoYCJGmYBz7e-vRuFWmm38UY,1075
32
+ clapp_pm-1.0.9.data/data/version.json,sha256=S7yOmQU4A-UqpUE3AX0vmjehgSS--fxuVEPG1YcIvDo,238
33
+ clapp_pm-1.0.9.dist-info/licenses/LICENSE,sha256=_hryv9pKR6udRexceUYuoYCJGmYBz7e-vRuFWmm38UY,1075
34
34
  packages/hello-python/main.py,sha256=Dy-Ov-Vumj8oQYI6qKWU6fIKD0gCB8b7KzAJVrGyLMg,1429
35
35
  packages/hello-python/manifest.json,sha256=fJOVJk_2rwpRJ6IeWMPieklJD3gAR279jvuqRH69s90,179
36
36
  packages/test-app/main.py,sha256=rN4Zo9u53bIVjcUlul059knx6v-2Cd1MFftPS57FIRU,33
37
37
  packages/test-app/manifest.json,sha256=kJe4sjYdPRNZD5hEeca80jj3lxeEWBMJoZ59RW7tiKI,118
38
38
  packages/test-app2/main.py,sha256=lHkbjTmehFY4VuYYF2dYiVBH7W0oqHHeY0I5W85iPTY,35
39
39
  packages/test-app2/manifest.json,sha256=vshXJrtRxBc_ISM6E8KT5BSmveMbjWszenlgxgSN86w,121
40
- clapp_pm-1.0.8.dist-info/METADATA,sha256=l3YAaufrnJXZB0d79q5I5QSC-LT5kC89F7Pdeu3986o,3979
41
- clapp_pm-1.0.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
42
- clapp_pm-1.0.8.dist-info/entry_points.txt,sha256=7j-3pQVpQfnaVzUV83g7zlCA30ePlnXkhHLAGGz9xrQ,36
43
- clapp_pm-1.0.8.dist-info/top_level.txt,sha256=90PY3qqc7ZdaDsLvwHtQiUG0OZqpsjxw_zkjiTTFY0I,351
44
- clapp_pm-1.0.8.dist-info/RECORD,,
40
+ clapp_pm-1.0.9.dist-info/METADATA,sha256=7Lehlo4mcYxbwf61VxTCb7qTcumO91KtZyAJpGdNYuI,3979
41
+ clapp_pm-1.0.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
42
+ clapp_pm-1.0.9.dist-info/entry_points.txt,sha256=7j-3pQVpQfnaVzUV83g7zlCA30ePlnXkhHLAGGz9xrQ,36
43
+ clapp_pm-1.0.9.dist-info/top_level.txt,sha256=90PY3qqc7ZdaDsLvwHtQiUG0OZqpsjxw_zkjiTTFY0I,351
44
+ clapp_pm-1.0.9.dist-info/RECORD,,
dependency_resolver.py CHANGED
@@ -492,6 +492,218 @@ def get_enhanced_system_dependency_report():
492
492
 
493
493
  return report
494
494
 
495
+ # Dependency Command Functions
496
+ def handle_dependency_check(args):
497
+ """Bağımlılık kontrolü komutunu işler"""
498
+ app_name = args.app_name
499
+
500
+ if app_name:
501
+ # Belirli bir uygulama için bağımlılık kontrolü
502
+ print(f"🔍 {app_name} bağımlılık kontrolü...")
503
+ print("=" * 50)
504
+
505
+ # Bağımlılık raporu
506
+ report = get_dependency_report(app_name)
507
+ print(report)
508
+
509
+ # Detaylı çözümleme
510
+ resolution = resolve_all_dependencies(app_name)
511
+ if resolution["status"] == "resolved":
512
+ print("✅ Tüm bağımlılıklar çözümlenmiş!")
513
+ elif resolution["status"] == "missing_dependencies":
514
+ print("❌ Eksik bağımlılıklar var!")
515
+ else:
516
+ print(f"⚠️ Durum: {resolution['status']}")
517
+
518
+ else:
519
+ # Sistem geneli bağımlılık kontrolü
520
+ print("🔍 Sistem geneli bağımlılık kontrolü...")
521
+ print("=" * 50)
522
+
523
+ report = get_system_dependency_report()
524
+ print(report)
525
+
526
+ # Gelişmiş sistem raporu
527
+ enhanced_report = get_enhanced_system_dependency_report()
528
+ print("\n" + enhanced_report)
529
+
530
+ def handle_dependency_install(args):
531
+ """Bağımlılık kurulumu komutunu işler"""
532
+ app_name = args.app_name
533
+ force = args.force
534
+
535
+ if not app_name:
536
+ print("❌ Uygulama adı belirtilmelidir!")
537
+ return False, "Uygulama adı eksik"
538
+
539
+ apps_dir = get_apps_directory()
540
+ app_path = os.path.join(apps_dir, app_name)
541
+
542
+ if not os.path.exists(app_path):
543
+ return False, f"Uygulama bulunamadı: {app_name}"
544
+
545
+ print(f"🔧 {app_name} bağımlılıkları kuruluyor...")
546
+ print("=" * 50)
547
+
548
+ # Manifest'i oku
549
+ manifest_path = os.path.join(app_path, "manifest.json")
550
+ if not os.path.exists(manifest_path):
551
+ return False, "Manifest dosyası bulunamadı"
552
+
553
+ try:
554
+ with open(manifest_path, 'r', encoding='utf-8') as f:
555
+ manifest = json.load(f)
556
+ except Exception as e:
557
+ return False, f"Manifest okuma hatası: {e}"
558
+
559
+ language = manifest.get('language', 'unknown')
560
+
561
+ if language == 'python':
562
+ success, message, missing_packages = check_and_install_python_dependencies(app_path)
563
+ if success:
564
+ if missing_packages:
565
+ print(f"✅ {message}")
566
+ print(f"📦 Kurulan paketler: {', '.join(missing_packages)}")
567
+ else:
568
+ print("✅ Tüm Python bağımlılıkları zaten kurulu")
569
+ return True, message
570
+ else:
571
+ return False, message
572
+
573
+ elif language == 'lua':
574
+ success, message, missing_packages = check_and_install_lua_dependencies(app_path)
575
+ if success:
576
+ if missing_packages:
577
+ print(f"✅ {message}")
578
+ print(f"🪨 Kurulan paketler: {', '.join(missing_packages)}")
579
+ else:
580
+ print("✅ Tüm Lua bağımlılıkları zaten kurulu")
581
+ return True, message
582
+ else:
583
+ return False, message
584
+
585
+ else:
586
+ return False, f"Desteklenmeyen dil: {language}"
587
+
588
+ def handle_engine_check(args):
589
+ """Engine kontrolü komutunu işler"""
590
+ app_name = args.app_name
591
+
592
+ if app_name:
593
+ # Belirli bir uygulama için engine kontrolü
594
+ apps_dir = get_apps_directory()
595
+ app_path = os.path.join(apps_dir, app_name)
596
+
597
+ if not os.path.exists(app_path):
598
+ return False, f"Uygulama bulunamadı: {app_name}"
599
+
600
+ print(f"🔧 {app_name} engine kontrolü...")
601
+ print("=" * 50)
602
+
603
+ available, message, engine_info = check_engine_availability(app_path)
604
+
605
+ if available:
606
+ print(f"✅ {message}")
607
+ else:
608
+ print(f"❌ {message}")
609
+
610
+ if engine_info:
611
+ print(f"📊 Engine Bilgileri:")
612
+ print(f" - Ad: {engine_info.get('name', 'Bilinmiyor')}")
613
+ print(f" - Dil: {engine_info.get('language', 'Bilinmiyor')}")
614
+ print(f" - Gerekli: {engine_info.get('required', False)}")
615
+ print(f" - Mevcut: {engine_info.get('available', False)}")
616
+
617
+ return available, message
618
+
619
+ else:
620
+ # Tüm uygulamalar için engine kontrolü
621
+ print("🔧 Sistem geneli engine kontrolü...")
622
+ print("=" * 50)
623
+
624
+ packages = list_packages()
625
+ engine_report = {
626
+ "total_apps": len(packages),
627
+ "apps_with_engines": 0,
628
+ "apps_with_missing_engines": 0,
629
+ "engine_details": []
630
+ }
631
+
632
+ for package in packages:
633
+ app_name = package['name']
634
+ apps_dir = get_apps_directory()
635
+ app_path = os.path.join(apps_dir, app_name)
636
+
637
+ available, message, engine_info = check_engine_availability(app_path)
638
+
639
+ if engine_info:
640
+ engine_report["apps_with_engines"] += 1
641
+ if not available:
642
+ engine_report["apps_with_missing_engines"] += 1
643
+
644
+ engine_report["engine_details"].append({
645
+ "app": app_name,
646
+ "engine": engine_info.get('name', 'Bilinmiyor'),
647
+ "language": engine_info.get('language', 'Bilinmiyor'),
648
+ "available": available,
649
+ "message": message
650
+ })
651
+
652
+ # Raporu yazdır
653
+ print(f"📊 Engine Raporu:")
654
+ print(f" - Toplam Uygulama: {engine_report['total_apps']}")
655
+ print(f" - Engine Gereksinimi: {engine_report['apps_with_engines']}")
656
+ print(f" - Eksik Engine: {engine_report['apps_with_missing_engines']}")
657
+ print()
658
+
659
+ if engine_report["engine_details"]:
660
+ print("🔍 Detaylı Engine Durumu:")
661
+ for detail in engine_report["engine_details"]:
662
+ status = "✅" if detail["available"] else "❌"
663
+ print(f" {status} {detail['app']}: {detail['engine']} ({detail['language']})")
664
+
665
+ return True, "Engine kontrolü tamamlandı"
666
+
667
+ def handle_dependency_tree(args):
668
+ """Bağımlılık ağacı komutunu işler"""
669
+ app_name = args.app_name
670
+
671
+ if not app_name:
672
+ print("❌ Uygulama adı belirtilmelidir!")
673
+ return False, "Uygulama adı eksik"
674
+
675
+ print(f"🌳 {app_name} bağımlılık ağacı...")
676
+ print("=" * 50)
677
+
678
+ resolution = resolve_all_dependencies(app_name)
679
+
680
+ if resolution["status"] == "error":
681
+ print(f"❌ Hata: {resolution.get('dependency_tree', {}).get('error', 'Bilinmeyen hata')}")
682
+ return False, "Bağımlılık ağacı oluşturulamadı"
683
+
684
+ tree = resolution["dependency_tree"]
685
+
686
+ def print_tree(node, level=0):
687
+ indent = " " * level
688
+ status = "✅" if node.get("missing_dependencies") == [] else "❌"
689
+ print(f"{indent}{status} {node['name']} (v{node['version']}) [{node['language']}]")
690
+
691
+ if node.get("missing_dependencies"):
692
+ for missing in node["missing_dependencies"]:
693
+ print(f"{indent} ❌ Eksik: {missing}")
694
+
695
+ for dep in node.get("dependencies", []):
696
+ print_tree(dep, level + 1)
697
+
698
+ print_tree(tree)
699
+
700
+ print(f"\n📊 Özet:")
701
+ print(f" - Durum: {resolution['status']}")
702
+ print(f" - Toplam Bağımlılık: {len(resolution['all_dependencies'])}")
703
+ print(f" - Eksik: {len(resolution['missing_dependencies'])}")
704
+
705
+ return True, "Bağımlılık ağacı gösterildi"
706
+
495
707
  if __name__ == "__main__":
496
708
  # Test için örnek kullanım
497
709
  print("Sistem bağımlılık raporu:")
main.py CHANGED
@@ -39,7 +39,7 @@ from uninstall_command import uninstall_app
39
39
  from list_command import list_apps as list_apps_new
40
40
 
41
41
  # Dependency yönetimi komutları
42
- from dependency_command import (
42
+ from dependency_resolver import (
43
43
  handle_dependency_check,
44
44
  handle_dependency_install,
45
45
  handle_engine_check,