@@ -186,6 +186,7 @@ async def index_markdown_file(
186186 new : bool | None = None ,
187187 existing_permalink_by_path : dict [str , str | None ] | None = None ,
188188 index_search : bool = True ,
189+ resolve_relations : bool = True ,
189190 ) -> IndexedEntity :
190191 """Index one markdown file using the same normalization and upsert path as batches."""
191192 if not self ._is_markdown (file ):
@@ -212,7 +213,12 @@ async def index_markdown_file(
212213 existing_permalink_by_path [file .path ] = prepared .markdown .frontmatter .permalink
213214
214215 with telemetry .span ("index.markdown_file.persist" , path = file .path , is_new = new ):
215- persisted = await self ._persist_markdown_file (prepared , is_new = new )
216+ persisted = await self ._persist_markdown_file (
217+ prepared ,
218+ is_new = new ,
219+ resolve_relations = resolve_relations ,
220+ reload_entity = False ,
221+ )
216222 existing_permalink_by_path [file .path ] = persisted .entity .permalink
217223
218224 with telemetry .span (
@@ -550,6 +556,8 @@ async def _persist_markdown_file(
550556 prepared : _PreparedMarkdownFile ,
551557 * ,
552558 is_new : bool | None = None ,
559+ resolve_relations : bool = True ,
560+ reload_entity : bool = True ,
553561 ) -> _PersistedMarkdownFile :
554562 existing = await self .entity_repository .get_by_file_path (
555563 prepared .file .path ,
@@ -561,15 +569,20 @@ async def _persist_markdown_file(
561569 Path (prepared .file .path ),
562570 prepared .markdown ,
563571 is_new = is_new ,
572+ existing_entity = existing ,
573+ resolve_relations = resolve_relations ,
574+ reload_entity = reload_entity ,
564575 )
565576 prepared = await self ._reconcile_persisted_permalink (prepared , entity )
566- updated = await self .entity_repository .update (
577+ metadata_updates = self ._entity_metadata_updates (prepared .file , prepared .final_checksum )
578+ updated = await self .entity_repository .update_fields (
567579 entity .id ,
568- self . _entity_metadata_updates ( prepared . file , prepared . final_checksum ) ,
580+ metadata_updates ,
569581 )
570- if updated is None :
582+ if not updated :
571583 raise ValueError (f"Failed to update markdown entity metadata for { prepared .file .path } " )
572- return _PersistedMarkdownFile (prepared = prepared , entity = updated )
584+ self ._apply_entity_metadata_updates (entity , metadata_updates )
585+ return _PersistedMarkdownFile (prepared = prepared , entity = entity )
573586
574587 async def _reconcile_persisted_permalink (
575588 self ,
@@ -659,6 +672,11 @@ def _entity_metadata_updates(
659672 updates ["content_type" ] = file .content_type
660673 return updates
661674
675+ def _apply_entity_metadata_updates (self , entity : Entity , updates : dict [str , object ]) -> None :
676+ """Keep the returned entity aligned with metadata written without reload."""
677+ for key , value in updates .items ():
678+ setattr (entity , key , value )
679+
662680 def _is_markdown (self , file : IndexInputFile ) -> bool :
663681 if file .content_type is not None :
664682 return file .content_type == "text/markdown"
0 commit comments