@@ -375,9 +375,9 @@ def args(self, value: DbtConfiguration | dict[str, t.Any]) -> None: # pyright:
375375 """Set the args for the DbtProject instance and update runtime config."""
376376 if isinstance (value , dict ):
377377 value = dc_replace (self ._args , ** value )
378+ self ._args = value
378379 set_from_args (value , None ) # pyright: ignore[reportArgumentType]
379380 self .parse_project (write_manifest = True , reparse_configuration = True )
380- self ._args = value
381381
382382 def set_args (self , ** kwargs : t .Any ) -> None :
383383 """Set the args for the DbtProject instance."""
@@ -519,6 +519,20 @@ def parse_project(
519519 ) -> None :
520520 """Parse the dbt project and load manifest."""
521521 if reparse_configuration :
522+ current = Path (self ._args .profiles_dir ).resolve ()
523+ standard_dirs = {
524+ self .project_root .resolve (),
525+ (Path .home () / ".dbt" ).resolve (),
526+ }
527+ env_dir = os .environ .get ("DBT_PROFILES_DIR" )
528+ if env_dir :
529+ standard_dirs .add (Path (env_dir ).expanduser ().resolve ())
530+ if current in standard_dirs :
531+ self ._args = dc_replace (
532+ self ._args ,
533+ profiles_dir = _get_profiles_dir (self .project_root ),
534+ )
535+ set_from_args (self ._args , None ) # pyright: ignore[reportArgumentType]
522536 self .runtime_config = RuntimeConfig .from_args (self ._args )
523537 self .__manifest_loader = ManifestLoader (
524538 self .runtime_config ,
@@ -532,10 +546,28 @@ def parse_project(
532546 self .__manifest_loader .manifest .state_check = (
533547 self .__manifest_loader .build_manifest_state_check ()
534548 )
535- self ._manifest = self .__manifest_loader .saved_manifest = self .__manifest_loader .load ()
536- if not self .__manifest_loader .skip_parsing :
537- self ._manifest .build_flat_graph ()
538- self ._manifest .build_group_map ()
549+ try :
550+ self ._manifest = self .__manifest_loader .saved_manifest = (
551+ self .__manifest_loader .load ()
552+ )
553+ if not self .__manifest_loader .skip_parsing :
554+ self ._manifest .build_flat_graph ()
555+ self ._manifest .build_group_map ()
556+ except Exception :
557+ if self .__manifest_loader .saved_manifest is not None :
558+ logger .warning ("Partial parse failed, forcing full reparse" )
559+ self .__manifest_loader = ManifestLoader (
560+ self .runtime_config ,
561+ self .runtime_config .load_dependencies (),
562+ )
563+ self ._manifest = self .__manifest_loader .saved_manifest = (
564+ self .__manifest_loader .load ()
565+ )
566+ if not self .__manifest_loader .skip_parsing :
567+ self ._manifest .build_flat_graph ()
568+ self ._manifest .build_group_map ()
569+ else :
570+ raise
539571
540572 self ._sql_parser = None
541573 self ._macro_parser = None
0 commit comments