Masaüstü istemci, src/cluster_erp/desktop/ içinde yer alan ve bir Cluster ERP sunucusuyla HTTP API'si üzerinden konuşan bir Qt uygulamasıdır. Bu sayfa klasör yapısını, desktop/main.py içindeki açılış ve giriş sırasını, desktop kurulum ekini ve PySide6 sürüm notunu açıklar. İstemcinin her parçasının masaüstü bölümünde kendi sayfası vardır. Nasıl başlatıldığı masaüstü istemciyi çalıştırın sayfasındadır.
Kısaca¶
- Giriş noktası
src/cluster_erp/desktop/main.py:110-130içindekimain()işlevidir.pyproject.toml:88onu ayrıcacluster-erp-desktopkonsol betiği olarak kurar. - Açılış; ayar deposunu, tema motorunu, erişilebilirliği, çevirmeni, API istemcisini ve sinyal veri yolunu oluşturur, ardından giriş iletişim kutusunu gösterir (
src/cluster_erp/desktop/main.py:162-190). - Girişten sonra istemci sunucu metadata'sını en çok üç denemeyle yükler ve hepsi başarısız olursa kapanır (
src/cluster_erp/desktop/main.py:194-222). - Ekranlar metadata'dan genel bileşenlerle kurulur. On bölüm anahtarı elle yazılmış ekranlara eşlenir (
src/cluster_erp/desktop/widgets/main_window.py:501-528). - PySide6,
desktopekindeki isteğe bağlı bir bağımlılıktır; böylece sunucu kurulumu GUI araç takımı taşımaz (pyproject.toml:68-74).
Nasıl çalışır¶
Klasör yapısı¶
Paketin beş klasörü vardır. Aşağıdaki sayılar doğrulanan commit'te src/cluster_erp/desktop/ listelenerek çıkarıldı: 86 Python dosyası, bunların 69'u boş değil, toplam 34.331 satır Python.
| Klasör | İçerik | Sayfa |
|---|---|---|
core/ |
API istemcisi, çalışan iş parçacıkları, genel API, sinyal veri yolu, metadata deposu, yabancı anahtar önbelleği, sekme yöneticisi, bölme denetleyicisi, ayar deposu, erişilebilirlik, saat dilimi yardımcıları, önizleme dosyaları | API istemcisi ve çalışanlar |
i18n/ |
translator.py, en.json, tr.json |
Diller, temalar ve erişilebilirlik |
themes/ |
theme_engine.py, style.qss |
Diller, temalar ve erişilebilirlik |
widgets/ |
Ana pencere, kenar çubuğu, durum çubuğu, bölmeler, iletişim kutuları ve common/, generic/, chat/ bileşen klasörleri |
Genel bileşenler |
modules/ |
bom, calendars, inventory, logs, procurement, production içindeki elle yazılmış ekranlar ve boş bir purchasing_quotations paketi |
Modül ekranları |
Açılış ve giriş sırası¶
Diyagram main() işlevinden görünür ana pencereye kadar olan yolu gösterir.
sequenceDiagram participant M as main participant L as LoginDialog participant A as ApiClient participant S as Sunucu participant MS as MetadataStore participant W as MainWindow M->>M: purge_stale_previews, QApplication, yazı tipi M->>M: SettingsStore, ThemeEngine, AccessibilityManager, Translator M->>A: ApiClient(api_url), set_language, set_signal_bus M->>L: exec L->>A: ApiWorker içinde login A->>S: POST /auth/login S-->>A: belirteçler, kullanıcı, izinler L-->>M: Accepted M->>MS: load, en çok 3 deneme MS->>S: GET /_meta, /_switches, /_overlay, /app_store/registry M->>W: MainWindow, show, restore_pane_layout M->>M: app.exec
Sözcüklerle:
main()günlük kaydını yapılandırır ve_global_exception_handlerişlevinisys.excepthookolarak kurar (src/cluster_erp/desktop/main.py:110-116)._run_app()önceki bir süreçten kalan ek önizleme klasörlerini siler,QApplicationnesnesini oluşturur ve sabit bir listeden kurulu ilk yazı tipini seçer (src/cluster_erp/desktop/main.py:133-160).SettingsStore,ThemeEngineveAccessibilityManagernesnelerini oluşturur ve erişilebilirlik ayarlarını henüz hiçbir pencere yokken uygular (src/cluster_erp/desktop/main.py:162-165).Translatornesnesini oluşturur, sunucu adresiniapi_urlayarından okur veApiClientnesnesini geçerli dil veSignalBusile oluşturur (src/cluster_erp/desktop/main.py:166-175).LoginDialogkipli çalışır. Giriş yapmadan kapatmak süreci 0 çıkış koduyla bitirir (src/cluster_erp/desktop/main.py:182-190).- İstemci
user_logged_inyayar veMetadataStoreoluşturur. Başarısız bir yükleme yeniden deneme sorusu gösterir. Üçüncü başarısızlıktan ya da iptalden sonra son bir hata görünür ve süreç 1 çıkış koduyla kapanır (src/cluster_erp/desktop/main.py:192-222). FkCacheoluşturur, metadata etiketlerini çevirmene kaydeder,MainWindowkurar, gösterir ve kayıtlı bölme yerleşimini geri yükler (src/cluster_erp/desktop/main.py:224-238).
Hata işleme¶
_global_exception_handler iz kaydını günlüğe yazar, platform değeri desktop olarak POST /logs/errors/client ucuna gönderir ve teknik ayrıntıyı bir ayrıntı düğmesinin arkasında tutan bir iletişim kutusu gösterir (src/cluster_erp/desktop/main.py:45-107). Bir bayrak, raporun kendisi başarısız olursa raporlamanın kendini yeniden çağırmasını engeller (src/cluster_erp/desktop/main.py:50-68). Açılış sırasındaki bir hata iz kaydını kritik bir ileti kutusunda gösterir ve 1 çıkış koduyla kapanır (src/cluster_erp/desktop/main.py:118-130).
Paketleme ve Qt sürümü¶
desktop eki PySide6>=6.7.0 ekler. Üstündeki yorum, ekin GUI araç takımını sunucu düğümlerinden uzak tuttuğunu, Windows'ta bilinen iyi sürümün 6.8.3 olduğunu ve 6.11.0'ın bir DLL hatasıyla başarısız olduğunu belirtir (pyproject.toml:68-74). CI lint işi, mypy src istemciyi de denetlesin diye PySide6==6.8.3 kurar (.github/workflows/ci.yml:48-50). Paket verisi dil dosyalarını ve stil sayfasını taşır (pyproject.toml:93-95).
Neden böyle kurulmuştur¶
desktopeki:pyproject.toml:68-71içindeki yorum, bir sunucu düğümünün asla GUI araç takımı kurmadığını belirtir.- Çökme raporlama:
src/cluster_erp/desktop/main.py:48-49içindeki belge dizgesi, bir istemci çökmesinin sunucu taraflı hatalarla aynı hata günlüğüne düştüğünü belirtir. - Çalışan iş parçacıklarıyla eşzamanlı HTTP: projenin yazılı mühendislik kuralları, karmaşıklıktan kaçınmak için istemcinin
QThreadçalışanlarıyla eşzamanlı birhttpxistemcisi kullandığını ve eşzamansız olay döngüsü kullanmadığını belirtir.ApiClientbirhttpx.Clientsarar (src/cluster_erp/desktop/core/api_client.py:86-91) veApiWorker,QThreadalt sınıfıdır (src/cluster_erp/desktop/core/api_worker.py:28).
Kurallar ve sınırlar¶
- İstemci hiçbir arka uç modül paketini içe aktarmaz.
src/cluster_erp/desktop/içindecluster_erp.modules,cluster_erp.coreveyacluster_erp.serveriçe aktarmaları arandığında eşleşme çıkmaz. Sohbet bileşenicluster_erp.aiiçe aktarır (src/cluster_erp/desktop/widgets/chat/chat_widget.py:47); bkz. sohbet bileşeni. - Ekranlar arasındaki her yenileme istemci tarafındaki
SignalBusüzerinden gider; bkz. sinyal veri yolu ve watch_entity. - Testler istemcinin parçalarını sabitler:
tests/test_desktop_app_scope.py,tests/test_desktop_datetime_field.py,tests/test_desktop_table_text_insets.pyvetests/test_order_shipment_chain.py:201(web ve masaüstü aynı metadata biçimlerini budar).web-client/_desktop_visual.py,web-client/_desktop_survey.py,web-client/_desktop_tenant_fields.pyveweb-client/_desktop_intranet_check.pysondaları gerçek bileşenleri ekransız Qt platformunda çalıştırır. Bunlar geliştirici araçları ve betikler sayfasında listelenir.
Diğer parçalarla etkileşim¶
- Giriş
POST /auth/loginvePOST /auth/refreshuçlarını kullanır (src/cluster_erp/desktop/core/api_client.py:134-205). Sunucu tarafı kimlik doğrulama ve oturumlar sayfasında açıklanır. - Metadata
GET /_meta,GET /_switches,GET /_overlayveGET /app_store/registryuçlarından gelir (src/cluster_erp/desktop/core/metadata_store.py:19-82). Sözleşme metadata modeli sayfasında açıklanır. - Bağlantı göstergesi her 15 saniyede bir sunucu kökündeki
GET /healthucunu çağırır (src/cluster_erp/desktop/widgets/status_bar.py:49-63,src/cluster_erp/desktop/core/api_client.py:326-333).
Sınırlar ve açık noktalar¶
MainWindowve durum çubuğu,main()işleviuser_logged_inyaydıktan sonra oluşturulur (src/cluster_erp/desktop/main.py:192,src/cluster_erp/desktop/main.py:227-236). Durum çubuğu bu sinyale yapıcısında bağlanır (src/cluster_erp/desktop/widgets/status_bar.py:44); bu yüzden ilk girişten sonra giriş yapan kullanıcının adı görünmez. Süresi dolmuş bir oturumun ardından yapılan girişten sonra görünür (src/cluster_erp/desktop/widgets/main_window.py:263-264).- Uygulama sürümü sabit
0.1.0değerine ayarlanır (src/cluster_erp/desktop/main.py:150); bu,pyproject.toml:7içindekiversionile aynı değerdir. Durum çubuğu bunu gösterir (src/cluster_erp/desktop/widgets/status_bar.py:73-75). pyproject.toml:93-95içindeki paket verisi yalnızca*.jsonve*.qsslisteler.src/cluster_erp/desktop/widgets/chat/assets/içindeki sohbet arka plan görselleri listelenmez. Düzenlenebilir olmayan bir kurulumun bunları içerip içermediği: Koddan belirlenemedi.pyproject.tomliçindeki paket verisi arandı ve depodaMANIFEST.inyoktur.
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| desktop client | cluster_erp.desktop |
Bir Cluster ERP sunucusunun HTTP API'sini kullanan PySide6 uygulaması. | masaüstü istemci | src/cluster_erp/desktop/main.py:110 |
| desktop extra | desktop |
PySide6'yı kuran isteğe bağlı bağımlılık grubu. | desktop ek paketi | pyproject.toml:72 |
| global exception handler | _global_exception_handler |
Yakalanmamış her istisnayı günlüğe yazan, raporlayan ve gösteren kanca. | genel hata yakalayıcı | src/cluster_erp/desktop/main.py:71 |
İlgili sayfalar¶
- Masaüstü istemci
- Masaüstü istemciyi çalıştırın
- API istemcisi ve çalışanlar
- Mimariye genel bakış
- Sunucu açılışı ve uygulama fabrikası
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.