content: from typing import Annotated, List, TYPE_CHECKING
  
  import strawberry
  import strawberry_django
  from django.contrib.contenttypes.models import ContentType
  from strawberry.types import Info
  
  from core.models import ObjectChange
  
  if TYPE_CHECKING:
      from core.graphql.types import DataFileType, DataSourceType, ObjectChangeType
  
  __all__ = (
      'ChangelogMixin',
      'SyncedDataMixin',
  )
  
  
  @strawberry.type
  class ChangelogMixin:
  
      @strawberry_django.field
      def changelog(self, info: Info) -> List[Annotated['ObjectChangeType', strawberry.lazy('.types')]]:  # noqa: F821
          content_type = ContentType.objects.get_for_model(self)
          object_changes = ObjectChange.objects.filter(
              changed_object_type=content_type,
              changed_object_id=self.pk
          )
          return object_changes.restrict(info.context.request.user, 'view')
  
  
  @strawberry.type
  class SyncedDataMixin:
      data_source: Annotated['DataSourceType', strawberry.lazy('core.graphql.types')] | None
      data_file: Annotated['DataFileType', strawberry.lazy('core.graphql.types')] | None
  