@@ -67,9 +67,9 @@ def __init__(
6767 "Module definition contains both prefix and replace_prefix. "
6868 "Only one at a time is allowed."
6969 )
70-
71- self . replace_prefix = replace_prefix
72- self . prefix = prefix
70+ self . path_modifier = PathModifier (
71+ replace_prefix , prefix , workflow , self . parent_modifier . path_modifier
72+ )
7373
7474 def use_rules (
7575 self ,
@@ -95,8 +95,7 @@ def use_rules(
9595 ruleinfo_overwrite = ruleinfo ,
9696 allow_rule_overwrite = True ,
9797 namespace = self .name ,
98- replace_prefix = self .replace_prefix ,
99- prefix = self .prefix ,
98+ path_modifier = self .path_modifier ,
10099 replace_wrapper_tag = self .get_wrapper_tag (),
101100 rule_proxies = self .rule_proxies ,
102101 )
@@ -153,40 +152,46 @@ def __init__(
153152 rule_exclude_list = None ,
154153 ruleinfo_overwrite = None ,
155154 allow_rule_overwrite = False ,
156- replace_prefix = None ,
157- prefix = None ,
155+ path_modifier : PathModifier | None = None ,
158156 replace_wrapper_tag = None ,
159157 namespace = None ,
160- rule_proxies = None ,
158+ rule_proxies : Rules | None = None ,
161159 ):
162160 if parent_modifier is None :
163- # default settings for globals if not inheriting from parent
164- self .globals = (
165- globals if globals is not None else dict (workflow .vanilla_globals )
166- )
161+ if globals is None : # use rule from module with maybe_ruleinfo
162+ globals = dict (workflow .vanilla_globals )
163+ else :
164+ # the first module modifier of workflow
165+ rule_proxies = Rules ()
166+ path_modifier = PathModifier (None , None , workflow , None )
167167 self .wildcard_constraints : dict = dict ()
168168 self .rules : set = set ()
169- self .rule_proxies = rule_proxies or Rules ()
170- self .globals ["rules" ] = self .rule_proxies
169+ self .globals = globals
170+ self .globals ["rules" ] = self .rule_proxies = rule_proxies
171171 self .globals ["checkpoints" ] = self .globals [
172172 "checkpoints"
173173 ].spawn_new_namespace ()
174+ if config is not None :
175+ self .globals ["config" ] = config
174176 self .globals ["__name__" ] = namespace
175177 self .modules : dict = dict ()
176- else :
177- # init with values from parent modifier
178+ self .parent_modifier = parent_modifier
179+ self .path_modifier = path_modifier
180+ elif parent_modifier is not None :
181+ # use rule (from same include) as ... with: init with values from parent modifier
178182 self .globals = parent_modifier .globals
179183 self .wildcard_constraints = parent_modifier .wildcard_constraints
180184 self .rules = parent_modifier .rules
181185 self .rule_proxies = parent_modifier .rule_proxies
182186 self .modules = parent_modifier .modules
187+ self .parent_modifier = parent_modifier .parent_modifier
188+ self .path_modifier = parent_modifier .path_modifier
189+ else :
190+ raise WorkflowError ("Invalid workflow modifier configuration." )
183191
184192 self .workflow = workflow
185193 self .base_snakefile = base_snakefile
186194
187- if config is not None :
188- self .globals ["config" ] = config
189-
190195 self .skip_configfile = config is not None
191196 self .resolved_rulename_modifier = resolved_rulename_modifier
192197 self .local_rulename_modifier = local_rulename_modifier
@@ -196,13 +201,12 @@ def __init__(
196201 self .rule_exclude_list = rule_exclude_list
197202 self .ruleinfo_overwrite = ruleinfo_overwrite
198203 self .allow_rule_overwrite = allow_rule_overwrite
199- self .path_modifier = PathModifier (replace_prefix , prefix , workflow ) # type: ignore[reportArgumentType]
200204 self .replace_wrapper_tag = replace_wrapper_tag
201205 self .namespace = namespace
202206 self .default_input_flags : DefaultFlags = DefaultFlags ()
203207 self .default_output_flags : DefaultFlags = DefaultFlags ()
204208
205- def inherit_rule_proxies (self , child_modifier ):
209+ def inherit_rule_proxies (self , child_modifier : "WorkflowModifier" ):
206210 for name , rule in child_modifier .rule_proxies ._rules .items ():
207211 if child_modifier .local_rulename_modifier is not None :
208212 name = child_modifier .local_rulename_modifier (name )
0 commit comments