Her modül ekranlarını metadata ile tanımlar: src/cluster_erp/core/metadata.py içinde tanımlanan Pydantic nesneleri. Bu sayfa bu sınıfları ve ana alanlarını sunucu tarafı sözleşme olarak listeler. Web uygulamasının onları nasıl çizdiği metadata çizimi sayfasında, masaüstü istemci masaüstü bölümünde belgelenir.
Kapsam ve kaynak¶
- Tanımlandığı yer:
src/cluster_erp/core/metadata.py - Sayı: 45 sınıf (
grep -c "^class "ile sayıldı) veLabelDict = dict[str, str]takma adı (src/cluster_erp/core/metadata.py:7).src/cluster_erpaltında 186EntityMeta(çağrısı vardır (grep -rn "EntityMeta("ile sayıldı).
LabelDict bir dil kodunu bir metne eşler; örneğin {"en": "...", "tr": "..."}. Metadata'daki her etiket, yer tutucu, yardım metni ve açıklama onu kullanır.
Metadata nasıl sunulur¶
Bir modül ModuleMeta nesnesini get_metadata() ile döndürür (src/cluster_erp/core/module_base.py:73-74). GET /api/v1/_meta, kiracı alanı varlıkları eklendikten sonra yüklü her modülün metadata'sını model_dump(exclude_none=True) ile tek bir JSON belgesine {"version": "1.0", "modules": {...}} dönüştürür. Belge süreç başına bir kez kurulur, bir ETag ve gzip biçimiyle ve yalnızca oturum açmış bir çağırana sunulur (src/cluster_erp/server/app.py:1518-1556). Bu yüzden değeri None olan bir alan belgede yer almaz.
Modül ve varlık¶
| Sınıf | Amacı | Ana alanlar | Kaynak |
|---|---|---|---|
ModuleMeta |
Bir modülün tüm tanımı | name, version, description, label, icon, order, sidebar, entities, provides, assistant_starters, home_widgets |
src/cluster_erp/core/metadata.py:719-740 |
EntityMeta |
Bir varlık: etiketler, uçlar, form, liste, ayrıntı, aksiyonlar ve seçenekler | label, label_plural, entity_type, endpoints, form, list_view, detail_view, actions, links, identity, facets, tree_view, lock, tenant_fields, photo, parent_entity, is_settings_entity |
src/cluster_erp/core/metadata.py:553-649 |
EndpointMeta |
Bir HTTP yöntemi ve modüle göreli yol | method, path |
src/cluster_erp/core/metadata.py:406-408 |
ScopeMeta |
Bir varlığı üst varlığa göre kapsar | entity, field, label, endpoint |
src/cluster_erp/core/metadata.py:411-415 |
EntityMeta, oluşturulurken ayrıntı görünümünün form sekmelerinin create_only olmayan her form grubunu kapsadığını ve bilinmeyen grup adlandırmadığını denetler. Uyuşmazlık, modül içe aktarılırken ValueError yükseltir (src/cluster_erp/core/metadata.py:617-649).
Formlar ve alanlar¶
| Sınıf | Amacı | Ana alanlar | Kaynak |
|---|---|---|---|
FormMeta |
Alan grupları listesi olarak bir form | field_groups |
src/cluster_erp/core/metadata.py:171-172 |
FieldGroupMeta |
Koşullu veya yalnızca oluşturmada olabilen alan grubu | key, label, group_type, condition, nested_key, create_only, edit_only, description, fields |
src/cluster_erp/core/metadata.py:149-168 |
FieldMeta |
Bir alan | key, label, field_type, required, choices, source, read_only, immutable_on_edit, permission, switch, autofill, weight, help, storage |
src/cluster_erp/core/metadata.py:79-146 |
ChoiceMeta |
Bir numaralandırmanın bir seçeneği | value, label |
src/cluster_erp/core/metadata.py:10-12 |
ForeignKeySource |
Bir yabancı anahtar seçicisinin seçeneklerini nereden yüklediği | module, endpoint, value_field, display_field, params, hierarchical, create_scope, group_field |
src/cluster_erp/core/metadata.py:21-33 |
CreateScopeMeta |
Bir seçiciden kayıt oluşturulduğunda bir alanı önceden doldurur | target_field, source_field, source |
src/cluster_erp/core/metadata.py:15-18 |
ConditionalSourceMeta |
Yalnızca bir koşulda geçerli seçici kaynağı | condition, source |
src/cluster_erp/core/metadata.py:61-63 |
ConditionMeta |
Bir alan değeri koşulu; value dikey çizgiyle ayrılmış seçenekler içerebilir, negate koşulu tersine çevirir |
field, value, negate |
src/cluster_erp/core/metadata.py:52-58 |
AutofillMeta |
Seçilen yabancı kayıttan bir değeri başka bir alana kopyalar | source_fields, target_field, resolve |
src/cluster_erp/core/metadata.py:36-44 |
AutoGenerateRule |
Diğer alanlar eşleştiğinde bir alanı dolduran şablon | when, template |
src/cluster_erp/core/metadata.py:47-49 |
DynamicFormSource |
Bir sürücü alanın seçili kaydından çekilen alt alanlar | driver_field, module, endpoint, schema_field |
src/cluster_erp/core/metadata.py:66-76 |
FieldMeta.field_type 19 değerden birini alır: string, text, integer, float, decimal, boolean, date, datetime, enum, multi_enum, foreign_key, multi_foreign_key, json, hidden_scope_field, file_upload, suggest_combo, dynamic_form, field_list ve string_list (src/cluster_erp/core/metadata.py:82-102). FieldMeta.permission, bir alanın değerini o izin koduna sahip olmayan çağıranlardan gizler; yorum zorlayan kod olarak core/field_access.py dosyasını adlandırır (src/cluster_erp/core/metadata.py:115-119). FieldMeta.switch, bir alanı yalnızca bir kiracı görüntüleme anahtarı açıkken gösterir (src/cluster_erp/core/metadata.py:120-125). FieldMeta.storage, gelen alanlar için column, kiracı tanımlı alanlar için extra'dır (src/cluster_erp/core/metadata.py:142-146).
Listeler¶
| Sınıf | Amacı | Ana alanlar | Kaynak |
|---|---|---|---|
ListViewMeta |
Bir liste ekranı | paginated, search_enabled, columns, filters |
src/cluster_erp/core/metadata.py:238-242 |
ColumnMeta |
Bir sütun | key, data_key, label, width, stretch, align, switch, formatter, choices, display_endpoint, display_field, value_field, legend |
src/cluster_erp/core/metadata.py:175-227 |
FilterMeta |
Bir liste süzgeci | key, label, filter_type, choices, source |
src/cluster_erp/core/metadata.py:230-235 |
SubTableMeta |
Bir alt varlık tablosunun sütunları | columns |
src/cluster_erp/core/metadata.py:380-381 |
ColumnMeta.formatter şunlardan birini alır: boolean, active_flag, date, datetime, decimal, enum, foreign_key, entity_type, entity_record veya i18n_message (src/cluster_erp/core/metadata.py:190-212).
Ayrıntı görünümleri¶
| Sınıf | Amacı | Ana alanlar | Kaynak |
|---|---|---|---|
DetailViewMeta |
Bir kayıt kartı | title_field, tabs |
src/cluster_erp/core/metadata.py:299-301 |
DetailTabMeta |
Bir kayıt kartının bir sekmesi | key, label, tab_type, custom_widget, entity, entity_module, field_groups, config, condition, scope_param, read_only, completeness_endpoint |
src/cluster_erp/core/metadata.py:252-296 |
CompletenessMeta ve CompletenessTierMeta |
Bir kaydın tamlık katmanları | tiers; key, label, fields |
src/cluster_erp/core/metadata.py:466-473 |
RecordLockMeta |
Bir kaydın salt okunur olduğu alan değerleri | field, values |
src/cluster_erp/core/metadata.py:476-492 |
AvatarMeta |
Bir kaydın profil fotoğrafı | field, endpoint |
src/cluster_erp/core/metadata.py:495-503 |
EmptyStateMeta |
Boş bir listenin metni ve simgesi | icon, title, description, action_label |
src/cluster_erp/core/metadata.py:459-463 |
SemanticGroupMeta |
Adlandırılmış bir alan grubu | key, label |
src/cluster_erp/core/metadata.py:454-456 |
DetailTabMeta.tab_type şunlardan birini alır: form, custom, sub_entity_table, sub_entity_tree, permission_checklist, role_checklist, access_summary, completeness veya read_model_panel (src/cluster_erp/core/metadata.py:255-270). RecordLockMeta belge dizgisi, values değerlerinin servisin zorladığı aynı sabitten gelmesini ister (src/cluster_erp/core/metadata.py:486-488).
Taraflar, facet'ler ve bileşik oluşturma¶
| Sınıf | Amacı | Ana alanlar | Kaynak |
|---|---|---|---|
IdentityMeta |
Bir varlığı başka bir modüldeki kanonik kaydın facet'i olarak işaretler | field, module, entity |
src/cluster_erp/core/metadata.py:304-313 |
FacetMeta |
Bir tarafın üstlenebileceği, taraf kartında satır içi gösterilen rol | module, entity, link_field, sections, multi, list_endpoint, requires_flag |
src/cluster_erp/core/metadata.py:357-377 |
FacetSectionMeta |
Bir facet'in karta kattığı bir bölüm | kind, label, form_groups, sub_entity, sub_module, party_scoped, columns, table, scope_param, scope_field |
src/cluster_erp/core/metadata.py:316-354 |
CompositeCreateMeta ve CompositeRoleMeta |
Bir kaydın rol facet'leriyle tek çağrıda yönlendirmeli oluşturulması | endpoint, roles; key, flag_field, buckets |
src/cluster_erp/core/metadata.py:506-514 |
Bu sınıflar projenin yazılı mühendislik kuralları içindeki taraf birleştirme kuralını uygular. Bkz. taraf birleştirme.
Aksiyonlar ve bağlantılar¶
| Sınıf | Amacı | Ana alanlar | Kaynak |
|---|---|---|---|
ActionMeta |
Kayıtlar üzerinde bir aksiyon | key, label, endpoint, scope, icon, condition, conditions, body_fields, body_field_groups, description |
src/cluster_erp/core/metadata.py:418-434 |
ActionConditionMeta |
Bir aksiyonun, sekmenin veya bağlantının ne zaman sunulduğu | field, value, negate |
src/cluster_erp/core/metadata.py:245-249 |
RecordLinkMeta |
Bir kayıt kartından bir uygulama ekranına kısayol | key, label, icon, module, section, params, condition |
src/cluster_erp/core/metadata.py:437-451 |
ActionMeta.scope, global, single_record veya parent değerlerinden biridir (src/cluster_erp/core/metadata.py:422). Bkz. aksiyonlar ve aksiyon sayfası.
Ağaçlar, kenar çubuğu ve ana ekran¶
| Sınıf | Amacı | Ana alanlar | Kaynak |
|---|---|---|---|
TreeViewMeta |
Bir ağaç ekranı | display_key, children_key, parent_id_key, tree_endpoint, nested, scope, max_depth_warning |
src/cluster_erp/core/metadata.py:390-397 |
TreeScopeMeta |
Bir ağacın başka bir varlığa göre kapsamı | entity, field, list_endpoint |
src/cluster_erp/core/metadata.py:384-387 |
DynamicComponentsMeta |
Bir tetikleyici alanın yüklediği seviyeler ve değerler | trigger_field, levels_endpoint, values_endpoint |
src/cluster_erp/core/metadata.py:400-403 |
SidebarMeta |
Bir modülün gezinmesi | groups |
src/cluster_erp/core/metadata.py:715-716 |
SidebarGroupMeta |
Bir gezinme grubu | key, label, icon, sections |
src/cluster_erp/core/metadata.py:691-695 |
SidebarSectionMeta |
Bir modülün bir ekranı | key, label, view_type, icon, entity, list_endpoint, tabs, entity_tabs, custom_widget, hidden_from_bar, required_permission, description |
src/cluster_erp/core/metadata.py:664-688 |
EntityTabRef |
Bir tabbed_list bölümünün bir sekmesi |
module, entity, label, icon, list_endpoint |
src/cluster_erp/core/metadata.py:652-661 |
HomeWidgetMeta |
Bir modülün sunduğu ana ekran bileşeni | key, label, icon, size, custom_widget, open_section |
src/cluster_erp/core/metadata.py:698-712 |
SidebarSectionMeta.view_type, list, detail, tree, settings, custom veya tabbed_list değerlerinden biridir (src/cluster_erp/core/metadata.py:667). HomeWidgetMeta.size, NxM desenine uymalıdır (src/cluster_erp/core/metadata.py:710).
Kiracı alanları¶
| Sınıf | Amacı | Ana alanlar | Kaynak |
|---|---|---|---|
TenantFieldsMeta |
Bir varlığın kiracı tanımlı alanları kabul ettiğini bildirir | buckets |
src/cluster_erp/core/metadata.py:545-550 |
TenantBucketMeta |
Kiracı alanı değerleri için bir depolama kovası | key, label, nested_key, group_keys, placement_group_keys, table, entity_types |
src/cluster_erp/core/metadata.py:517-542 |
Bkz. kiracı alanları.
Kısıtlar ve doğrulama¶
- Metadata nesneleri Pydantic modelleridir; yanlış bir sabit değer veya eksik zorunlu alan, modül metadata'sını kurarken başarısız olur.
- Açılışta bir
sub_entity_tablesekmesi sütunsuz bir varlığı gösteriyorsa sunucu başarısız olur (src/cluster_erp/server/app.py:547-589). - Projenin yazılı mühendislik kuralları web uygulamasını tamamen metadata güdümlü yapar: ekran, form, liste ve aksiyon davranışı metadata'dan gelir.
tests/test_metadata_driven_rules.pyvetests/test_architecture_boundaries.py:75bu kuralın parçalarını korur; bkz. mimari sınırlar.
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| metadata | ModuleMeta |
Bir modülün ekranlarının iki istemcinin de çizdiği bildirimsel tanımı. | metadata | src/cluster_erp/core/metadata.py:719 |
| entity metadata | EntityMeta |
Bir varlığın uçlarının, formunun, listesinin, kartının ve aksiyonlarının tanımı. | varlık metadata'sı | src/cluster_erp/core/metadata.py:553 |
| facet | FacetMeta |
Bir tarafın oynayabileceği, taraf kartında bir bölüm olarak gösterilen rol. | rol bölümü | src/cluster_erp/core/metadata.py:357 |
| label dictionary | LabelDict |
Dil kodundan görünen metne eşleme. | etiket sözlüğü | src/cluster_erp/core/metadata.py:7 |
İlgili sayfalar¶
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.