clapp-pm 1.0.10__py3-none-any.whl → 1.0.11__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.
- backup_current/build_index.py +132 -0
- backup_current/check_env.py +133 -0
- backup_current/clapp_core.py +61 -0
- backup_current/clean_command.py +214 -0
- backup_current/cli_commands.py +404 -0
- backup_current/dependency_resolver.py +272 -0
- backup_current/doctor_command.py +239 -0
- backup_current/info_command.py +194 -0
- backup_current/install_command.py +236 -0
- backup_current/installer.py +323 -0
- backup_current/list_command.py +262 -0
- backup_current/main.py +294 -0
- backup_current/manifest_schema.py +84 -0
- backup_current/manifest_validator.py +245 -0
- backup_current/package_registry.py +127 -0
- backup_current/package_runner.py +85 -0
- backup_current/post_install_hint.py +144 -0
- backup_current/publish_command.py +253 -0
- backup_current/remote_registry.py +285 -0
- backup_current/setup.py +160 -0
- backup_current/system_test.py +477 -0
- backup_current/uninstall_command.py +215 -0
- backup_current/validate_command.py +225 -0
- backup_current/version.py +8 -0
- backup_current/version_command.py +145 -0
- backup_current/where_command.py +207 -0
- check_env.py +1 -8
- clapp-packages-repo/packages/hello-python/main.py +0 -49
- clapp-packages-repo/packages/hello-python/manifest.json +0 -8
- {clapp_pm-1.0.10.data → clapp_pm-1.0.11.data}/data/version.json +1 -1
- {clapp_pm-1.0.10.dist-info → clapp_pm-1.0.11.dist-info}/METADATA +1 -1
- clapp_pm-1.0.11.dist-info/RECORD +71 -0
- {clapp_pm-1.0.10.dist-info → clapp_pm-1.0.11.dist-info}/top_level.txt +1 -0
- doctor_command.py +0 -1
- install_command.py +3 -0
- version.py +1 -1
- clapp_pm-1.0.10.dist-info/RECORD +0 -45
- {clapp_pm-1.0.10.dist-info → clapp_pm-1.0.11.dist-info}/WHEEL +0 -0
- {clapp_pm-1.0.10.dist-info → clapp_pm-1.0.11.dist-info}/entry_points.txt +0 -0
- {clapp_pm-1.0.10.dist-info → clapp_pm-1.0.11.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,225 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
validate_command.py - Uygulama doğrulama modülü
|
4
|
+
|
5
|
+
Bu modül `clapp validate <folder>` komutunu destekler ve
|
6
|
+
uygulama klasörlerinin doğru yapıda olup olmadığını kontrol eder.
|
7
|
+
"""
|
8
|
+
|
9
|
+
import os
|
10
|
+
import json
|
11
|
+
from pathlib import Path
|
12
|
+
from manifest_validator import validate_manifest_verbose
|
13
|
+
|
14
|
+
def validate_app_folder(folder_path):
|
15
|
+
"""Uygulama klasörünü doğrular"""
|
16
|
+
folder = Path(folder_path)
|
17
|
+
|
18
|
+
print(f"🔍 '{folder_path}' klasörü doğrulanıyor...")
|
19
|
+
print("=" * 50)
|
20
|
+
|
21
|
+
# Klasörün var olup olmadığını kontrol et
|
22
|
+
if not folder.exists():
|
23
|
+
print(f"❌ Klasör bulunamadı: {folder_path}")
|
24
|
+
return False
|
25
|
+
|
26
|
+
if not folder.is_dir():
|
27
|
+
print(f"❌ Belirtilen yol bir klasör değil: {folder_path}")
|
28
|
+
return False
|
29
|
+
|
30
|
+
errors = []
|
31
|
+
warnings = []
|
32
|
+
|
33
|
+
# 1. manifest.json kontrolü
|
34
|
+
manifest_path = folder / "manifest.json"
|
35
|
+
if not manifest_path.exists():
|
36
|
+
errors.append("manifest.json dosyası bulunamadı")
|
37
|
+
else:
|
38
|
+
print("✅ manifest.json dosyası mevcut")
|
39
|
+
|
40
|
+
# Manifest içeriğini kontrol et
|
41
|
+
try:
|
42
|
+
with open(manifest_path, 'r', encoding='utf-8') as f:
|
43
|
+
manifest_data = json.load(f)
|
44
|
+
|
45
|
+
# Manifest'i doğrula
|
46
|
+
is_valid, validation_errors = validate_manifest_verbose(manifest_data)
|
47
|
+
|
48
|
+
if is_valid:
|
49
|
+
print("✅ manifest.json geçerli")
|
50
|
+
else:
|
51
|
+
print("❌ manifest.json geçersiz:")
|
52
|
+
for error in validation_errors:
|
53
|
+
print(f" • {error}")
|
54
|
+
errors.append(f"Manifest hatası: {error}")
|
55
|
+
|
56
|
+
# Giriş dosyası kontrolü
|
57
|
+
if "entry" in manifest_data:
|
58
|
+
entry_file = folder / manifest_data["entry"]
|
59
|
+
if entry_file.exists():
|
60
|
+
print(f"✅ Giriş dosyası mevcut: {manifest_data['entry']}")
|
61
|
+
else:
|
62
|
+
error_msg = f"Giriş dosyası bulunamadı: {manifest_data['entry']}"
|
63
|
+
print(f"❌ {error_msg}")
|
64
|
+
errors.append(error_msg)
|
65
|
+
|
66
|
+
# Dil kontrolü
|
67
|
+
if "language" in manifest_data:
|
68
|
+
language = manifest_data["language"].lower()
|
69
|
+
if language in ["python", "lua"]:
|
70
|
+
print(f"✅ Desteklenen dil: {language}")
|
71
|
+
else:
|
72
|
+
warning_msg = f"Desteklenmeyen dil: {language}"
|
73
|
+
print(f"⚠️ {warning_msg}")
|
74
|
+
warnings.append(warning_msg)
|
75
|
+
|
76
|
+
except json.JSONDecodeError as e:
|
77
|
+
error_msg = f"manifest.json JSON formatı geçersiz: {str(e)}"
|
78
|
+
print(f"❌ {error_msg}")
|
79
|
+
errors.append(error_msg)
|
80
|
+
except Exception as e:
|
81
|
+
error_msg = f"manifest.json okunamadı: {str(e)}"
|
82
|
+
print(f"❌ {error_msg}")
|
83
|
+
errors.append(error_msg)
|
84
|
+
|
85
|
+
# 2. Klasör içeriği kontrolü
|
86
|
+
files = list(folder.iterdir())
|
87
|
+
if not files:
|
88
|
+
warnings.append("Klasör boş")
|
89
|
+
print("⚠️ Klasör boş")
|
90
|
+
else:
|
91
|
+
print(f"✅ Klasör içeriği: {len(files)} öğe")
|
92
|
+
|
93
|
+
# 3. Önerilen dosya yapısı kontrolü
|
94
|
+
recommended_files = ["manifest.json", "README.md", "requirements.txt"]
|
95
|
+
missing_recommended = []
|
96
|
+
|
97
|
+
for rec_file in recommended_files:
|
98
|
+
if not (folder / rec_file).exists():
|
99
|
+
missing_recommended.append(rec_file)
|
100
|
+
|
101
|
+
if missing_recommended:
|
102
|
+
print("💡 Önerilen dosyalar eksik:")
|
103
|
+
for missing in missing_recommended:
|
104
|
+
print(f" • {missing}")
|
105
|
+
|
106
|
+
# 4. Dosya boyutu kontrolü
|
107
|
+
try:
|
108
|
+
total_size = 0
|
109
|
+
file_count = 0
|
110
|
+
|
111
|
+
for file_path in folder.rglob("*"):
|
112
|
+
if file_path.is_file():
|
113
|
+
file_count += 1
|
114
|
+
total_size += file_path.stat().st_size
|
115
|
+
|
116
|
+
print(f"📊 İstatistikler: {file_count} dosya, {format_size(total_size)}")
|
117
|
+
|
118
|
+
# Büyük dosyalar için uyarı
|
119
|
+
if total_size > 100 * 1024 * 1024: # 100MB
|
120
|
+
warnings.append(f"Büyük uygulama boyutu: {format_size(total_size)}")
|
121
|
+
|
122
|
+
except Exception as e:
|
123
|
+
warnings.append(f"Dosya boyutu hesaplanamadı: {str(e)}")
|
124
|
+
|
125
|
+
# Sonuçları göster
|
126
|
+
print("\n" + "=" * 50)
|
127
|
+
print("📋 Doğrulama Sonuçları:")
|
128
|
+
|
129
|
+
if not errors and not warnings:
|
130
|
+
print("🎉 Mükemmel! Uygulama klasörü tamamen geçerli.")
|
131
|
+
print("✅ Kurulum için hazır.")
|
132
|
+
elif not errors:
|
133
|
+
print("✅ Uygulama klasörü geçerli.")
|
134
|
+
if warnings:
|
135
|
+
print("⚠️ Bazı uyarılar var:")
|
136
|
+
for warning in warnings:
|
137
|
+
print(f" • {warning}")
|
138
|
+
else:
|
139
|
+
print("❌ Uygulama klasörü geçersiz.")
|
140
|
+
print("🔧 Düzeltilmesi gereken hatalar:")
|
141
|
+
for error in errors:
|
142
|
+
print(f" • {error}")
|
143
|
+
|
144
|
+
if warnings:
|
145
|
+
print("⚠️ Ek uyarılar:")
|
146
|
+
for warning in warnings:
|
147
|
+
print(f" • {warning}")
|
148
|
+
|
149
|
+
# Öneriler
|
150
|
+
if errors or warnings:
|
151
|
+
print("\n💡 Öneriler:")
|
152
|
+
if not manifest_path.exists():
|
153
|
+
print("• manifest.json dosyası oluşturun")
|
154
|
+
print("• Örnek: clapp init komutu ile başlayabilirsiniz")
|
155
|
+
|
156
|
+
if missing_recommended:
|
157
|
+
print("• Önerilen dosyaları ekleyin:")
|
158
|
+
for missing in missing_recommended:
|
159
|
+
if missing == "README.md":
|
160
|
+
print(f" - {missing}: Uygulama açıklaması")
|
161
|
+
elif missing == "requirements.txt":
|
162
|
+
print(f" - {missing}: Python bağımlılıkları (Python uygulamaları için)")
|
163
|
+
|
164
|
+
if warnings:
|
165
|
+
print("• Uyarıları gözden geçirin ve gerekirse düzeltin")
|
166
|
+
|
167
|
+
print(f"\n🔧 Daha fazla yardım için: clapp doctor")
|
168
|
+
|
169
|
+
return len(errors) == 0
|
170
|
+
|
171
|
+
def format_size(size_bytes):
|
172
|
+
"""Dosya boyutunu formatlar"""
|
173
|
+
if size_bytes == 0:
|
174
|
+
return "0 B"
|
175
|
+
|
176
|
+
for unit in ['B', 'KB', 'MB', 'GB']:
|
177
|
+
if size_bytes < 1024.0:
|
178
|
+
return f"{size_bytes:.1f} {unit}"
|
179
|
+
size_bytes /= 1024.0
|
180
|
+
|
181
|
+
return f"{size_bytes:.1f} TB"
|
182
|
+
|
183
|
+
def validate_multiple_folders(folder_paths):
|
184
|
+
"""Birden fazla klasörü doğrular"""
|
185
|
+
results = []
|
186
|
+
|
187
|
+
for folder_path in folder_paths:
|
188
|
+
print(f"\n{'='*60}")
|
189
|
+
result = validate_app_folder(folder_path)
|
190
|
+
results.append((folder_path, result))
|
191
|
+
|
192
|
+
# Özet
|
193
|
+
print(f"\n{'='*60}")
|
194
|
+
print("📊 Toplu Doğrulama Özeti:")
|
195
|
+
|
196
|
+
valid_count = sum(1 for _, result in results if result)
|
197
|
+
invalid_count = len(results) - valid_count
|
198
|
+
|
199
|
+
print(f"✅ Geçerli: {valid_count}")
|
200
|
+
print(f"❌ Geçersiz: {invalid_count}")
|
201
|
+
|
202
|
+
if invalid_count > 0:
|
203
|
+
print("\n❌ Geçersiz klasörler:")
|
204
|
+
for folder_path, result in results:
|
205
|
+
if not result:
|
206
|
+
print(f" • {folder_path}")
|
207
|
+
|
208
|
+
return invalid_count == 0
|
209
|
+
|
210
|
+
if __name__ == "__main__":
|
211
|
+
import sys
|
212
|
+
|
213
|
+
if len(sys.argv) < 2:
|
214
|
+
print("Kullanım: python validate_command.py <klasör_yolu>")
|
215
|
+
print("Örnek: python validate_command.py apps/my-app")
|
216
|
+
sys.exit(1)
|
217
|
+
|
218
|
+
folder_paths = sys.argv[1:]
|
219
|
+
|
220
|
+
if len(folder_paths) == 1:
|
221
|
+
success = validate_app_folder(folder_paths[0])
|
222
|
+
sys.exit(0 if success else 1)
|
223
|
+
else:
|
224
|
+
success = validate_multiple_folders(folder_paths)
|
225
|
+
sys.exit(0 if success else 1)
|
@@ -0,0 +1,145 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
version_command.py - Sürüm bilgisi modülü
|
4
|
+
|
5
|
+
Bu modül `clapp version` komutunu destekler ve
|
6
|
+
clapp'in sürüm bilgilerini gösterir.
|
7
|
+
"""
|
8
|
+
|
9
|
+
import sys
|
10
|
+
import platform
|
11
|
+
import json
|
12
|
+
from pathlib import Path
|
13
|
+
|
14
|
+
def get_version_info():
|
15
|
+
"""Sürüm bilgilerini toplar"""
|
16
|
+
# version.json dosyasından sürüm bilgisini oku
|
17
|
+
version_file = Path("version.json")
|
18
|
+
|
19
|
+
if version_file.exists():
|
20
|
+
try:
|
21
|
+
with open(version_file, 'r', encoding='utf-8') as f:
|
22
|
+
version_data = json.load(f)
|
23
|
+
|
24
|
+
app_name = version_data.get("name", "clapp")
|
25
|
+
version = version_data.get("version", "1.0.0")
|
26
|
+
author = version_data.get("author", "Bilinmiyor")
|
27
|
+
|
28
|
+
except Exception:
|
29
|
+
app_name = "clapp"
|
30
|
+
version = "1.0.0"
|
31
|
+
author = "Bilinmiyor"
|
32
|
+
else:
|
33
|
+
app_name = "clapp"
|
34
|
+
version = "1.0.0"
|
35
|
+
author = "Bilinmiyor"
|
36
|
+
|
37
|
+
# Sistem bilgileri
|
38
|
+
python_version = f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"
|
39
|
+
system_info = platform.system()
|
40
|
+
machine = platform.machine()
|
41
|
+
|
42
|
+
return {
|
43
|
+
"app_name": app_name,
|
44
|
+
"version": version,
|
45
|
+
"author": author,
|
46
|
+
"python_version": python_version,
|
47
|
+
"system": system_info,
|
48
|
+
"machine": machine,
|
49
|
+
"platform": f"{system_info} {platform.release()}"
|
50
|
+
}
|
51
|
+
|
52
|
+
def print_version(format_type="default"):
|
53
|
+
"""Sürüm bilgisini yazdırır"""
|
54
|
+
info = get_version_info()
|
55
|
+
|
56
|
+
if format_type == "short":
|
57
|
+
print(info["version"])
|
58
|
+
elif format_type == "json":
|
59
|
+
import json
|
60
|
+
output = {
|
61
|
+
"version": info["version"],
|
62
|
+
"python": info["python_version"],
|
63
|
+
"os": info["system"],
|
64
|
+
"machine": info["machine"]
|
65
|
+
}
|
66
|
+
print(json.dumps(output, indent=2))
|
67
|
+
else: # default
|
68
|
+
print(f"🚀 {info['app_name']} v{info['version']}")
|
69
|
+
print(f"🐍 Python {info['python_version']}")
|
70
|
+
print(f"💻 Platform: {info['platform']} ({info['machine']})")
|
71
|
+
print(f"👨💻 Yazar: {info['author']}")
|
72
|
+
|
73
|
+
def print_detailed_version():
|
74
|
+
"""Detaylı sürüm bilgisini yazdırır"""
|
75
|
+
info = get_version_info()
|
76
|
+
|
77
|
+
print("📋 clapp Detaylı Sürüm Bilgileri")
|
78
|
+
print("=" * 50)
|
79
|
+
|
80
|
+
# Temel bilgiler
|
81
|
+
print("🚀 Uygulama Bilgileri:")
|
82
|
+
print(f" Ad: {info['app_name']}")
|
83
|
+
print(f" Sürüm: {info['version']}")
|
84
|
+
print(f" Yazar: {info['author']}")
|
85
|
+
print()
|
86
|
+
|
87
|
+
# Python bilgileri
|
88
|
+
print("🐍 Python Bilgileri:")
|
89
|
+
print(f" Sürüm: {info['python_version']}")
|
90
|
+
print(f" Çalıştırılabilir: {sys.executable}")
|
91
|
+
print(f" Prefix: {sys.prefix}")
|
92
|
+
print()
|
93
|
+
|
94
|
+
# Platform bilgileri
|
95
|
+
print("💻 Platform Bilgileri:")
|
96
|
+
print(f" İşletim Sistemi: {info['system']}")
|
97
|
+
print(f" Sürüm: {platform.release()}")
|
98
|
+
print(f" Mimari: {info['machine']}")
|
99
|
+
print(f" İşlemci: {platform.processor()}")
|
100
|
+
print()
|
101
|
+
|
102
|
+
# Modül bilgileri
|
103
|
+
print("📦 Modül Bilgileri:")
|
104
|
+
try:
|
105
|
+
import flet
|
106
|
+
print(f" Flet: v{flet.__version__}")
|
107
|
+
except ImportError:
|
108
|
+
print(" Flet: Yüklü değil")
|
109
|
+
|
110
|
+
# Ek bilgiler
|
111
|
+
print()
|
112
|
+
print("📁 Dizin Bilgileri:")
|
113
|
+
print(f" Çalışma Dizini: {Path.cwd()}")
|
114
|
+
|
115
|
+
# apps/ dizini kontrolü
|
116
|
+
apps_dir = Path("apps")
|
117
|
+
if apps_dir.exists():
|
118
|
+
app_count = len([d for d in apps_dir.iterdir() if d.is_dir()])
|
119
|
+
print(f" Apps Dizini: {apps_dir.resolve()} ({app_count} uygulama)")
|
120
|
+
else:
|
121
|
+
print(" Apps Dizini: Bulunamadı")
|
122
|
+
|
123
|
+
def check_latest_version():
|
124
|
+
"""En son sürümü kontrol eder (placeholder)"""
|
125
|
+
print("🔍 En son sürüm kontrol ediliyor...")
|
126
|
+
print("⚠️ Bu özellik henüz mevcut değil.")
|
127
|
+
print("📞 Manuel kontrol için: https://github.com/user/clapp")
|
128
|
+
|
129
|
+
if __name__ == "__main__":
|
130
|
+
import sys
|
131
|
+
|
132
|
+
if len(sys.argv) > 1:
|
133
|
+
arg = sys.argv[1]
|
134
|
+
if arg == "--short":
|
135
|
+
print_version("short")
|
136
|
+
elif arg == "--json":
|
137
|
+
print_version("json")
|
138
|
+
elif arg == "--detailed":
|
139
|
+
print_detailed_version()
|
140
|
+
elif arg == "--latest":
|
141
|
+
check_latest_version()
|
142
|
+
else:
|
143
|
+
print_version("default")
|
144
|
+
else:
|
145
|
+
print_version("default")
|
@@ -0,0 +1,207 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
where_command.py - Uygulama konum bulma modülü
|
4
|
+
|
5
|
+
Bu modül `clapp where <app_name>` komutunu destekler ve
|
6
|
+
yüklü uygulamaların dosya sistemi konumlarını gösterir.
|
7
|
+
"""
|
8
|
+
|
9
|
+
import os
|
10
|
+
import json
|
11
|
+
from pathlib import Path
|
12
|
+
|
13
|
+
def locate_app_path(app_name, check_entry=False):
|
14
|
+
"""Uygulama konumunu bulur"""
|
15
|
+
print(f"📍 '{app_name}' uygulaması aranıyor...")
|
16
|
+
print("=" * 50)
|
17
|
+
|
18
|
+
# Varsayılan uygulama dizini
|
19
|
+
apps_dir = Path("apps")
|
20
|
+
app_dir = apps_dir / app_name
|
21
|
+
|
22
|
+
if not app_dir.exists():
|
23
|
+
print(f"❌ '{app_name}' uygulaması bulunamadı.")
|
24
|
+
print()
|
25
|
+
print("🔍 Öneriler:")
|
26
|
+
print("• Uygulama adını kontrol edin")
|
27
|
+
print("• Yüklü uygulamaları görmek için: clapp list")
|
28
|
+
print("• Uygulama yüklemek için: clapp install <kaynak>")
|
29
|
+
return False
|
30
|
+
|
31
|
+
if not app_dir.is_dir():
|
32
|
+
print(f"❌ '{app_name}' bir dizin değil.")
|
33
|
+
return False
|
34
|
+
|
35
|
+
# Temel bilgiler
|
36
|
+
abs_path = app_dir.resolve()
|
37
|
+
print(f"📂 Uygulama konumu:")
|
38
|
+
print(f" {abs_path}")
|
39
|
+
print()
|
40
|
+
|
41
|
+
# Dizin içeriği
|
42
|
+
try:
|
43
|
+
contents = list(app_dir.iterdir())
|
44
|
+
print(f"📋 Dizin içeriği ({len(contents)} öğe):")
|
45
|
+
|
46
|
+
for item in contents:
|
47
|
+
if item.is_file():
|
48
|
+
size = item.stat().st_size
|
49
|
+
print(f" 📄 {item.name} ({format_size(size)})")
|
50
|
+
elif item.is_dir():
|
51
|
+
print(f" 📁 {item.name}/")
|
52
|
+
print()
|
53
|
+
except Exception as e:
|
54
|
+
print(f"⚠️ Dizin içeriği okunamadı: {e}")
|
55
|
+
print()
|
56
|
+
|
57
|
+
# Manifest kontrolü
|
58
|
+
manifest_path = app_dir / "manifest.json"
|
59
|
+
if manifest_path.exists():
|
60
|
+
print("✅ manifest.json mevcut")
|
61
|
+
|
62
|
+
try:
|
63
|
+
with open(manifest_path, 'r', encoding='utf-8') as f:
|
64
|
+
manifest = json.load(f)
|
65
|
+
|
66
|
+
# Temel manifest bilgileri
|
67
|
+
print(f" 📝 Ad: {manifest.get('name', 'Belirtilmemiş')}")
|
68
|
+
print(f" 🔢 Sürüm: {manifest.get('version', 'Belirtilmemiş')}")
|
69
|
+
print(f" 🔧 Dil: {manifest.get('language', 'Belirtilmemiş')}")
|
70
|
+
print(f" 🚀 Giriş: {manifest.get('entry', 'Belirtilmemiş')}")
|
71
|
+
|
72
|
+
# Giriş dosyası kontrolü
|
73
|
+
if check_entry and "entry" in manifest:
|
74
|
+
entry_file = app_dir / manifest["entry"]
|
75
|
+
print()
|
76
|
+
print("🔍 Giriş dosyası kontrolü:")
|
77
|
+
if entry_file.exists():
|
78
|
+
size = entry_file.stat().st_size
|
79
|
+
print(f" ✅ {manifest['entry']} mevcut ({format_size(size)})")
|
80
|
+
print(f" 📍 Tam yol: {entry_file.resolve()}")
|
81
|
+
else:
|
82
|
+
print(f" ❌ {manifest['entry']} bulunamadı")
|
83
|
+
|
84
|
+
except json.JSONDecodeError:
|
85
|
+
print(" ❌ manifest.json geçersiz JSON formatında")
|
86
|
+
except Exception as e:
|
87
|
+
print(f" ❌ manifest.json okunamadı: {e}")
|
88
|
+
else:
|
89
|
+
print("❌ manifest.json bulunamadı")
|
90
|
+
|
91
|
+
print()
|
92
|
+
|
93
|
+
# Kullanım örnekleri
|
94
|
+
print("🚀 Kullanım:")
|
95
|
+
print(f" clapp run {app_name}")
|
96
|
+
print(f" clapp info {app_name}")
|
97
|
+
print(f" clapp validate {app_dir}")
|
98
|
+
|
99
|
+
return True
|
100
|
+
|
101
|
+
def format_size(size_bytes):
|
102
|
+
"""Dosya boyutunu formatlar"""
|
103
|
+
if size_bytes == 0:
|
104
|
+
return "0 B"
|
105
|
+
|
106
|
+
for unit in ['B', 'KB', 'MB', 'GB']:
|
107
|
+
if size_bytes < 1024.0:
|
108
|
+
return f"{size_bytes:.1f} {unit}"
|
109
|
+
size_bytes /= 1024.0
|
110
|
+
|
111
|
+
return f"{size_bytes:.1f} TB"
|
112
|
+
|
113
|
+
def list_all_app_locations():
|
114
|
+
"""Tüm uygulamaların konumlarını listeler"""
|
115
|
+
print("📍 Tüm Uygulama Konumları")
|
116
|
+
print("=" * 60)
|
117
|
+
|
118
|
+
apps_dir = Path("apps")
|
119
|
+
if not apps_dir.exists():
|
120
|
+
print("❌ apps/ dizini bulunamadı")
|
121
|
+
return False
|
122
|
+
|
123
|
+
app_dirs = [d for d in apps_dir.iterdir() if d.is_dir()]
|
124
|
+
|
125
|
+
if not app_dirs:
|
126
|
+
print("📦 Yüklü uygulama bulunamadı")
|
127
|
+
return True
|
128
|
+
|
129
|
+
print(f"📂 Toplam {len(app_dirs)} uygulama bulundu:\n")
|
130
|
+
|
131
|
+
for app_dir in sorted(app_dirs):
|
132
|
+
app_name = app_dir.name
|
133
|
+
abs_path = app_dir.resolve()
|
134
|
+
|
135
|
+
# Manifest kontrolü
|
136
|
+
manifest_path = app_dir / "manifest.json"
|
137
|
+
version = "?"
|
138
|
+
language = "?"
|
139
|
+
|
140
|
+
if manifest_path.exists():
|
141
|
+
try:
|
142
|
+
with open(manifest_path, 'r', encoding='utf-8') as f:
|
143
|
+
manifest = json.load(f)
|
144
|
+
version = manifest.get('version', '?')
|
145
|
+
language = manifest.get('language', '?')
|
146
|
+
except:
|
147
|
+
pass
|
148
|
+
|
149
|
+
# Dizin boyutu
|
150
|
+
try:
|
151
|
+
total_size = sum(f.stat().st_size for f in app_dir.rglob("*") if f.is_file())
|
152
|
+
size_str = format_size(total_size)
|
153
|
+
except:
|
154
|
+
size_str = "?"
|
155
|
+
|
156
|
+
print(f"📦 {app_name} (v{version}, {language})")
|
157
|
+
print(f" 📍 {abs_path}")
|
158
|
+
print(f" 📊 {size_str}")
|
159
|
+
print()
|
160
|
+
|
161
|
+
return True
|
162
|
+
|
163
|
+
def open_app_location(app_name):
|
164
|
+
"""Uygulama konumunu dosya yöneticisinde açar"""
|
165
|
+
apps_dir = Path("apps")
|
166
|
+
app_dir = apps_dir / app_name
|
167
|
+
|
168
|
+
if not app_dir.exists():
|
169
|
+
print(f"❌ '{app_name}' uygulaması bulunamadı.")
|
170
|
+
return False
|
171
|
+
|
172
|
+
abs_path = app_dir.resolve()
|
173
|
+
|
174
|
+
try:
|
175
|
+
import platform
|
176
|
+
system = platform.system()
|
177
|
+
|
178
|
+
if system == "Windows":
|
179
|
+
os.startfile(abs_path)
|
180
|
+
elif system == "Darwin": # macOS
|
181
|
+
os.system(f"open '{abs_path}'")
|
182
|
+
else: # Linux
|
183
|
+
os.system(f"xdg-open '{abs_path}'")
|
184
|
+
|
185
|
+
print(f"📂 '{app_name}' konumu dosya yöneticisinde açıldı")
|
186
|
+
print(f"📍 {abs_path}")
|
187
|
+
return True
|
188
|
+
|
189
|
+
except Exception as e:
|
190
|
+
print(f"❌ Dosya yöneticisi açılamadı: {e}")
|
191
|
+
print(f"📍 Manuel olarak açın: {abs_path}")
|
192
|
+
return False
|
193
|
+
|
194
|
+
if __name__ == "__main__":
|
195
|
+
import sys
|
196
|
+
|
197
|
+
if len(sys.argv) < 2:
|
198
|
+
list_all_app_locations()
|
199
|
+
else:
|
200
|
+
app_name = sys.argv[1]
|
201
|
+
check_entry = "--check-entry" in sys.argv
|
202
|
+
open_flag = "--open" in sys.argv
|
203
|
+
|
204
|
+
if open_flag:
|
205
|
+
open_app_location(app_name)
|
206
|
+
else:
|
207
|
+
locate_app_path(app_name, check_entry)
|
check_env.py
CHANGED
@@ -72,13 +72,7 @@ def check_permissions():
|
|
72
72
|
except Exception as e:
|
73
73
|
return False, f"Yazma izinleri: Hata - {str(e)}"
|
74
74
|
|
75
|
-
|
76
|
-
"""Flet kurulumunu kontrol eder"""
|
77
|
-
try:
|
78
|
-
import flet
|
79
|
-
return True, f"Flet kurulu: v{flet.__version__}"
|
80
|
-
except ImportError:
|
81
|
-
return False, "Flet kurulu değil (pip install flet)"
|
75
|
+
|
82
76
|
|
83
77
|
def run_environment_check():
|
84
78
|
"""Tüm ortam kontrollerini çalıştırır ve sonuçları yazdırır"""
|
@@ -93,7 +87,6 @@ def run_environment_check():
|
|
93
87
|
("clapp PATH Kontrolü", check_clapp_in_path),
|
94
88
|
("apps/ Dizini", check_apps_directory),
|
95
89
|
("Yazma İzinleri", check_permissions),
|
96
|
-
("Flet Kurulumu", check_flet_installation),
|
97
90
|
]
|
98
91
|
|
99
92
|
passed = 0
|
@@ -1,49 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
Hello Python - Basit Python merhaba dünya uygulaması
|
4
|
-
clapp paket yöneticisi için örnek uygulama
|
5
|
-
"""
|
6
|
-
|
7
|
-
import sys
|
8
|
-
import os
|
9
|
-
from datetime import datetime
|
10
|
-
|
11
|
-
def main():
|
12
|
-
"""Ana fonksiyon"""
|
13
|
-
print("🐍 Merhaba Python Dünyası!")
|
14
|
-
print("=" * 40)
|
15
|
-
|
16
|
-
# Uygulama bilgileri
|
17
|
-
print(f"📦 Uygulama: hello-python")
|
18
|
-
print(f"🔢 Sürüm: 1.0.0")
|
19
|
-
print(f"💻 Dil: Python {sys.version.split()[0]}")
|
20
|
-
print(f"📅 Tarih: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
21
|
-
|
22
|
-
# Sistem bilgileri
|
23
|
-
print(f"\n🖥️ Sistem Bilgileri:")
|
24
|
-
print(f" İşletim Sistemi: {os.name}")
|
25
|
-
print(f" Python Sürümü: {sys.version}")
|
26
|
-
print(f" Çalışma Dizini: {os.getcwd()}")
|
27
|
-
|
28
|
-
# Basit hesaplama
|
29
|
-
print(f"\n🧮 Basit Hesaplama:")
|
30
|
-
a, b = 15, 25
|
31
|
-
print(f" {a} + {b} = {a + b}")
|
32
|
-
print(f" {a} * {b} = {a * b}")
|
33
|
-
|
34
|
-
# Dosya listesi
|
35
|
-
print(f"\n📁 Mevcut Dizin İçeriği:")
|
36
|
-
try:
|
37
|
-
files = os.listdir('.')
|
38
|
-
for i, file in enumerate(files[:5], 1):
|
39
|
-
print(f" {i}. {file}")
|
40
|
-
if len(files) > 5:
|
41
|
-
print(f" ... ve {len(files) - 5} dosya daha")
|
42
|
-
except Exception as e:
|
43
|
-
print(f" Dosya listesi alınamadı: {e}")
|
44
|
-
|
45
|
-
print(f"\n✅ hello-python uygulaması başarıyla çalıştı!")
|
46
|
-
print("🎉 clapp paket yöneticisine hoş geldiniz!")
|
47
|
-
|
48
|
-
if __name__ == "__main__":
|
49
|
-
main()
|