@@ -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