@@ -55,11 +55,16 @@ def run_env_base(cls) -> str:
5555
5656 @property
5757 def keys (self ) -> Iterable [str ]:
58- key = self .key
59- keys = key .split (self .SEP ) if self .key else []
60- if self .PREFIX and len (keys ) >= len (self .PREFIX ) and tuple (keys [: len (self .PREFIX )]) == self .PREFIX :
61- keys = keys [len (self .PREFIX ) :]
62- return keys
58+ # Build keys from prefix + name directly, preserving dots in names (e.g. env "py3.11").
59+ prefix , name = self ._prefix , self ._name
60+ if prefix is None and not name :
61+ return []
62+ parts : list [str ] = prefix .split (self .SEP ) if prefix else []
63+ if self .PREFIX and len (parts ) >= len (self .PREFIX ) and tuple (parts [: len (self .PREFIX )]) == self .PREFIX :
64+ parts = parts [len (self .PREFIX ) :] # strip global PREFIX (e.g. ("tool", "tox"))
65+ if name :
66+ parts .append (name )
67+ return parts
6368
6469
6570class TomlPyProjectSection (TomlSection ):
@@ -113,17 +118,20 @@ def get_loader(self, section: Section, override_map: OverrideMap) -> Loader[Any]
113118
114119 def envs (self , core_conf : CoreConfigSet ) -> Iterator [str ]:
115120 yield from core_conf ["env_list" ]
116- yield from [i . key for i in self .sections ()]
121+ yield from [section . name for section in self .sections ()]
117122
118123 def sections (self ) -> Iterator [Section ]:
119124 for env_name in self ._our_content .get (self ._Section .ENV , {}):
120125 if not isinstance (env_name , str ):
121126 msg = f"Environment key must be string, got { env_name !r} "
122127 raise HandledError (msg )
123- yield self ._Section .from_key (env_name )
128+ yield self ._Section .test_env (env_name )
124129
125130 def get_base_sections (self , base : list [str ], in_section : Section ) -> Iterator [Section ]: # noqa: ARG002
126- yield from [self ._Section .from_key (b ) for b in base ]
131+ core_prefix = self ._Section .core_prefix ()
132+ strip = f"{ core_prefix } { self ._Section .SEP } " if core_prefix else ""
133+ for entry in base :
134+ yield self ._Section (prefix = core_prefix or None , name = entry .removeprefix (strip ))
127135
128136 def get_tox_env_section (self , item : str ) -> tuple [Section , list [str ], list [str ]]:
129137 return self ._Section .test_env (item ), [self ._Section .run_env_base ()], [self ._Section .package_env_base ()]
0 commit comments