@@ -508,7 +508,7 @@ def load(self):
508508 # determine whether they need processing.
509509 start_process = time .perf_counter ()
510510 self .process_sources (self .root_project .project_name )
511- self .process_refs (self .root_project .project_name )
511+ self .process_refs (self .root_project .project_name , self . root_project . dependencies )
512512 self .process_docs (self .root_project )
513513 self .process_metrics (self .root_project )
514514 self .check_valid_group_config ()
@@ -533,7 +533,10 @@ def load(self):
533533 external_nodes_modified = self .inject_external_nodes ()
534534 if external_nodes_modified :
535535 self .manifest .rebuild_ref_lookup ()
536- self .process_refs (self .root_project .project_name )
536+ self .process_refs (
537+ self .root_project .project_name ,
538+ self .root_project .dependencies ,
539+ )
537540 # parent and child maps will be rebuilt by write_manifest
538541
539542 if not skip_parsing :
@@ -1038,23 +1041,23 @@ def track_project_load(self):
10381041
10391042 # Takes references in 'refs' array of nodes and exposures, finds the target
10401043 # node, and updates 'depends_on.nodes' with the unique id
1041- def process_refs (self , current_project : str ):
1044+ def process_refs (self , current_project : str , dependencies : Optional [ Dict [ str , Project ]] ):
10421045 for node in self .manifest .nodes .values ():
10431046 if node .created_at < self .started_at :
10441047 continue
1045- _process_refs (self .manifest , current_project , node )
1048+ _process_refs (self .manifest , current_project , node , dependencies )
10461049 for exposure in self .manifest .exposures .values ():
10471050 if exposure .created_at < self .started_at :
10481051 continue
1049- _process_refs (self .manifest , current_project , exposure )
1052+ _process_refs (self .manifest , current_project , exposure , dependencies )
10501053 for metric in self .manifest .metrics .values ():
10511054 if metric .created_at < self .started_at :
10521055 continue
1053- _process_refs (self .manifest , current_project , metric )
1056+ _process_refs (self .manifest , current_project , metric , dependencies )
10541057 for semantic_model in self .manifest .semantic_models .values ():
10551058 if semantic_model .created_at < self .started_at :
10561059 continue
1057- _process_refs (self .manifest , current_project , semantic_model )
1060+ _process_refs (self .manifest , current_project , semantic_model , dependencies )
10581061 self .update_semantic_model (semantic_model )
10591062
10601063 # Takes references in 'metrics' array of nodes and exposures, finds the target
@@ -1372,9 +1375,13 @@ def _process_docs_for_metrics(context: Dict[str, Any], metric: Metric) -> None:
13721375 metric .description = get_rendered (metric .description , context )
13731376
13741377
1375- def _process_refs (manifest : Manifest , current_project : str , node ) -> None :
1378+ def _process_refs (
1379+ manifest : Manifest , current_project : str , node , dependencies : Optional [Mapping [str , Project ]]
1380+ ) -> None :
13761381 """Given a manifest and node in that manifest, process its refs"""
13771382
1383+ dependencies = dependencies or {}
1384+
13781385 if isinstance (node , SeedNode ):
13791386 return
13801387
@@ -1413,18 +1420,20 @@ def _process_refs(manifest: Manifest, current_project: str, node) -> None:
14131420 )
14141421
14151422 continue
1416- elif (
1417- isinstance (target_model , ModelNode )
1418- and target_model .access == AccessType .Private
1419- and node .resource_type != NodeType .SqlOperation
1420- and node .resource_type != NodeType .RPCCall # TODO: rm
1421- ):
1422- if not node .group or node .group != target_model .group :
1423- raise dbt .exceptions .DbtReferenceError (
1424- unique_id = node .unique_id ,
1425- ref_unique_id = target_model .unique_id ,
1426- group = dbt .utils .cast_to_str (target_model .group ),
1427- )
1423+ elif manifest .is_invalid_private_ref (node , target_model , dependencies ):
1424+ raise dbt .exceptions .DbtReferenceError (
1425+ unique_id = node .unique_id ,
1426+ ref_unique_id = target_model .unique_id ,
1427+ access = AccessType .Private ,
1428+ scope = dbt .utils .cast_to_str (target_model .group ),
1429+ )
1430+ elif manifest .is_invalid_protected_ref (node , target_model , dependencies ):
1431+ raise dbt .exceptions .DbtReferenceError (
1432+ unique_id = node .unique_id ,
1433+ ref_unique_id = target_model .unique_id ,
1434+ access = AccessType .Protected ,
1435+ scope = target_model .package_name ,
1436+ )
14281437
14291438 target_model_id = target_model .unique_id
14301439 node .depends_on .add_node (target_model_id )
@@ -1577,7 +1586,7 @@ def process_macro(config: RuntimeConfig, manifest: Manifest, macro: Macro) -> No
15771586def process_node (config : RuntimeConfig , manifest : Manifest , node : ManifestNode ):
15781587
15791588 _process_sources_for_node (manifest , config .project_name , node )
1580- _process_refs (manifest , config .project_name , node )
1589+ _process_refs (manifest , config .project_name , node , config . dependencies )
15811590 ctx = generate_runtime_docs_context (config , node , manifest , config .project_name )
15821591 _process_docs_for_node (ctx , node )
15831592
0 commit comments