@@ -24,6 +24,7 @@ def hub_builder(
2424        module_name ,
2525        config ,
2626        whl_overrides ,
27+         default_python_version ,
2728        minor_mapping ,
2829        available_interpreters ,
2930        simpleapi_download_fn ,
@@ -69,8 +70,10 @@ def hub_builder(
6970        _get_index_urls  =  {},
7071        _use_downloader  =  {},
7172        _simpleapi_cache  =  simpleapi_cache ,
73+         _get_python_version  =  lambda  * a , ** k : _get_python_version (self , * a , ** k ),
7274        # instance constants 
7375        _config  =  config ,
76+         _default_python_version  =  default_python_version ,
7477        _whl_overrides  =  whl_overrides ,
7578        _evaluate_markers_fn  =  evaluate_markers_fn ,
7679        _logger  =  logger ,
@@ -102,7 +105,7 @@ def _build(self):
102105    )
103106
104107def  _pip_parse (self , module_ctx , pip_attr ):
105-     python_version  =  pip_attr . python_version 
108+     python_version  =  self . _get_python_version ( pip_attr ) 
106109    if  python_version  in  self ._platforms :
107110        fail ((
108111            "Duplicate pip python version '{version}' for hub "  + 
@@ -230,7 +233,7 @@ def _set_get_index_urls(self, pip_attr):
230233        # here 
231234        return 
232235
233-     python_version  =  pip_attr . python_version 
236+     python_version  =  self . _get_python_version ( pip_attr ) 
234237    self ._use_downloader .setdefault (python_version , {}).update ({
235238        normalize_name (s ): False 
236239        for  s  in  pip_attr .simpleapi_skip 
@@ -259,7 +262,7 @@ def _detect_interpreter(self, pip_attr):
259262    python_interpreter_target  =  pip_attr .python_interpreter_target 
260263    if  python_interpreter_target  ==  None  and  not  pip_attr .python_interpreter :
261264        python_name  =  "python_{}_host" .format (
262-             pip_attr . python_version .replace ("." , "_" ),
265+             self . _get_python_version ( pip_attr ) .replace ("." , "_" ),
263266        )
264267        if  python_name  not  in   self ._available_interpreters :
265268            fail ((
@@ -269,7 +272,7 @@ def _detect_interpreter(self, pip_attr):
269272                "Expected to find {python_name} among registered versions:\n   {labels}" 
270273            ).format (
271274                hub_name  =  self .name ,
272-                 version  =  pip_attr . python_version ,
275+                 version  =  self . _get_python_version ( pip_attr ) ,
273276                python_name  =  python_name ,
274277                labels  =  "  \n " .join (self ._available_interpreters ),
275278            ))
@@ -332,7 +335,7 @@ def _evaluate_markers(self, pip_attr):
332335    if  self ._config .enable_pipstar :
333336        return  lambda  _ , requirements : evaluate_markers_star (
334337            requirements  =  requirements ,
335-             platforms  =  self ._platforms [pip_attr . python_version ],
338+             platforms  =  self ._platforms [self . _get_python_version ( pip_attr ) ],
336339        )
337340
338341    interpreter  =  _detect_interpreter (self , pip_attr )
@@ -355,7 +358,7 @@ def _evaluate_markers(self, pip_attr):
355358        module_ctx ,
356359        requirements  =  {
357360            k : {
358-                 p : self ._platforms [pip_attr . python_version ][p ].triple 
361+                 p : self ._platforms [self . _get_python_version ( pip_attr ) ][p ].triple 
359362                for  p  in  plats 
360363            }
361364            for  k , plats  in  requirements .items ()
@@ -379,7 +382,7 @@ def _create_whl_repos(
379382        pip_attr: {type}`struct` - the struct that comes from the tag class iteration. 
380383    """ 
381384    logger  =  self ._logger 
382-     platforms  =  self ._platforms [pip_attr . python_version ]
385+     platforms  =  self ._platforms [self . _get_python_version ( pip_attr ) ]
383386    requirements_by_platform  =  parse_requirements (
384387        module_ctx ,
385388        requirements_by_platform  =  requirements_files_by_platform (
@@ -391,14 +394,14 @@ def _create_whl_repos(
391394            extra_pip_args  =  pip_attr .extra_pip_args ,
392395            platforms  =  sorted (platforms ),  # here we only need keys 
393396            python_version  =  full_version (
394-                 version  =  pip_attr . python_version ,
397+                 version  =  self . _get_python_version ( pip_attr ) ,
395398                minor_mapping  =  self ._minor_mapping ,
396399            ),
397400            logger  =  logger ,
398401        ),
399402        platforms  =  platforms ,
400403        extra_pip_args  =  pip_attr .extra_pip_args ,
401-         get_index_urls  =  self ._get_index_urls .get (pip_attr . python_version ),
404+         get_index_urls  =  self ._get_index_urls .get (self . _get_python_version ( pip_attr ) ),
402405        evaluate_markers  =  _evaluate_markers (self , pip_attr ),
403406        logger  =  logger ,
404407    )
@@ -431,15 +434,15 @@ def _create_whl_repos(
431434                whl_library_args  =  whl_library_args ,
432435                download_only  =  pip_attr .download_only ,
433436                netrc  =  self ._config .netrc  or  pip_attr .netrc ,
434-                 use_downloader  =  _use_downloader (self , pip_attr . python_version , whl .name ),
437+                 use_downloader  =  _use_downloader (self , self . _get_python_version ( pip_attr ) , whl .name ),
435438                auth_patterns  =  self ._config .auth_patterns  or  pip_attr .auth_patterns ,
436-                 python_version  =  _major_minor_version (pip_attr . python_version ),
439+                 python_version  =  _major_minor_version (self . _get_python_version ( pip_attr ) ),
437440                is_multiple_versions  =  whl .is_multiple_versions ,
438441                enable_pipstar  =  self ._config .enable_pipstar ,
439442            )
440443            _add_whl_library (
441444                self ,
442-                 python_version  =  pip_attr . python_version ,
445+                 python_version  =  self . _get_python_version ( pip_attr ) ,
443446                whl  =  whl ,
444447                repo  =  repo ,
445448            )
@@ -579,3 +582,10 @@ def _use_downloader(self, python_version, whl_name):
579582        normalize_name (whl_name ),
580583        self ._get_index_urls .get (python_version ) !=  None ,
581584    )
585+ 
586+ def  _get_python_version (self , pip_attr ):
587+     python_version  =  pip_attr .python_version 
588+     if  python_version :
589+         return  python_version 
590+     else :
591+         return  self ._default_python_version 
0 commit comments