xref: /aosp_15_r20/external/bazelbuild-rules_python/python/private/full_version.bzl (revision 60517a1edbc8ecf509223e9af94a7adec7d736b8)
1*60517a1eSAndroid Build Coastguard Worker# Copyright 2023 The Bazel Authors. All rights reserved.
2*60517a1eSAndroid Build Coastguard Worker#
3*60517a1eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*60517a1eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*60517a1eSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*60517a1eSAndroid Build Coastguard Worker#
7*60517a1eSAndroid Build Coastguard Worker#    http://www.apache.org/licenses/LICENSE-2.0
8*60517a1eSAndroid Build Coastguard Worker#
9*60517a1eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*60517a1eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*60517a1eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*60517a1eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*60517a1eSAndroid Build Coastguard Worker# limitations under the License.
14*60517a1eSAndroid Build Coastguard Worker
15*60517a1eSAndroid Build Coastguard Worker"""A small helper to ensure that we are working with full versions."""
16*60517a1eSAndroid Build Coastguard Worker
17*60517a1eSAndroid Build Coastguard Workerdef full_version(*, version, minor_mapping):
18*60517a1eSAndroid Build Coastguard Worker    """Return a full version.
19*60517a1eSAndroid Build Coastguard Worker
20*60517a1eSAndroid Build Coastguard Worker    Args:
21*60517a1eSAndroid Build Coastguard Worker        version: {type}`str` the version in `X.Y` or `X.Y.Z` format.
22*60517a1eSAndroid Build Coastguard Worker        minor_mapping: {type}`dict[str, str]` mapping between `X.Y` to `X.Y.Z` format.
23*60517a1eSAndroid Build Coastguard Worker
24*60517a1eSAndroid Build Coastguard Worker    Returns:
25*60517a1eSAndroid Build Coastguard Worker        a full version given the version string. If the string is already a
26*60517a1eSAndroid Build Coastguard Worker        major version then we return it as is.
27*60517a1eSAndroid Build Coastguard Worker    """
28*60517a1eSAndroid Build Coastguard Worker    if version in minor_mapping:
29*60517a1eSAndroid Build Coastguard Worker        return minor_mapping[version]
30*60517a1eSAndroid Build Coastguard Worker
31*60517a1eSAndroid Build Coastguard Worker    parts = version.split(".")
32*60517a1eSAndroid Build Coastguard Worker    if len(parts) == 3:
33*60517a1eSAndroid Build Coastguard Worker        return version
34*60517a1eSAndroid Build Coastguard Worker    elif len(parts) == 2:
35*60517a1eSAndroid Build Coastguard Worker        fail(
36*60517a1eSAndroid Build Coastguard Worker            "Unknown Python version '{}', available values are: {}".format(
37*60517a1eSAndroid Build Coastguard Worker                version,
38*60517a1eSAndroid Build Coastguard Worker                ",".join(minor_mapping.keys()),
39*60517a1eSAndroid Build Coastguard Worker            ),
40*60517a1eSAndroid Build Coastguard Worker        )
41*60517a1eSAndroid Build Coastguard Worker    else:
42*60517a1eSAndroid Build Coastguard Worker        fail("Unknown version format: '{}'".format(version))
43