Files
leocrm/app/models/__init__.py
T

105 lines
3.7 KiB
Python
Raw Normal View History

"""SQLAlchemy models for LeoCRM."""
2026-06-04 00:06:16 +00:00
from app.models.address import Address
from app.models.attachment import Attachment
from app.models.audit import AuditLog
from app.models.auth import ApiToken, PasswordResetToken
from app.models.backup import Backup
from app.models.bank_account import BankAccount
from app.models.compliance import ComplianceIncident
from app.models.consumer_inbox import ConsumerInbox
# Contact/ContactPerson: lazy via package __getattr__ (Paket 6) — the physical
# model lives in app.plugins.builtins.contacts.models; importing the plugin
# framework while app.models is still initializing caused a proven circular
# ImportError (app.core.auth -> app.models.session -> ... -> app.plugins).
from app.models.contact_folder import ContactFolder
from app.models.contact_merge import ContactMergeHistory
from app.models.currency import Currency
from app.models.custom_field_definition import CustomFieldDefinition
from app.models.entity_history import EntityHistory
from app.models.entity_permission import EntityPermission
from app.models.entity_policy import EntityPolicy
from app.models.group import Group, UserGroup
from app.models.notification import Notification, NotificationPreference, NotificationType
from app.models.outbox import EventOutbox, OutboxDelivery
from app.models.owned_mixin import OwnedMixin
from app.models.permission_delegation import PermissionDelegation
from app.models.permission_template import PermissionTemplate
from app.models.plugin import Plugin, PluginMigration
from app.models.role import Role
from app.models.saved_view import SavedView
from app.models.sequence import Sequence
from app.models.session import Session
from app.models.system_settings import SystemSettings
from app.models.tax import TaxRate
from app.models.tenant import Tenant
from app.models.user import User, UserTenant
from app.models.webhook import Webhook
from app.models.workflow import Workflow, WorkflowInstance, WorkflowStepHistory
2026-06-04 00:06:16 +00:00
__all__ = [
"Tenant",
"User",
"UserTenant",
"Role",
"Group",
"UserGroup",
"Session",
"AuditLog",
"Notification",
"NotificationType",
"NotificationPreference",
"PasswordResetToken",
"ApiToken",
"ComplianceIncident",
"Contact",
"ContactPerson",
"ContactFolder",
"ContactMergeHistory",
"EntityPermission",
"ConsumerInbox",
"PermissionDelegation",
"PermissionTemplate",
"EntityPolicy",
"OwnedMixin",
2026-07-23 08:42:26 +02:00
"EntityHistory",
2026-07-04 00:22:07 +00:00
"Currency",
2026-07-04 00:23:35 +00:00
"TaxRate",
2026-07-04 00:24:40 +00:00
"Sequence",
2026-07-04 00:26:21 +00:00
"SystemSettings",
2026-07-04 00:29:38 +00:00
"Attachment",
"Address",
"BankAccount",
"Plugin",
"PluginMigration",
"Backup",
"CustomFieldDefinition",
"Webhook",
"Workflow",
"WorkflowInstance",
"WorkflowStepHistory",
"SavedView",
]
from app.models.entity_attachment import EntityAttachment # noqa: F401
from app.models.workspace import ( # noqa: F401
Workspace,
WorkspaceModule,
WorkspaceUser,
WorkspaceWidget,
)
# ── Lazy Contact re-export (Paket 6, #357) ──────────────────────────────────
# The physical home of Contact/ContactPerson is the ContactsPlugin
# (app.plugins.builtins.contacts.models). Resolving them lazily via package
# __getattr__ keeps ``from app.models import *`` (alembic/env.py) working
# while avoiding a plugin-framework import during app.models initialization
# (proven circular ImportError, see app/models/contact.py).
def __getattr__(name: str):
if name in {"Contact", "ContactPerson"}:
from app.models.contact import Contact, ContactPerson
return {"Contact": Contact, "ContactPerson": ContactPerson}[name]
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")