canonicalize_version method

String canonicalize_version({
  1. required Object? version,
  2. bool strip_trailing_zero = true,
})

canonicalize_version

python docstring

This is very similar to Version.str, but has one subtle difference with the way it handles the release segment.

python source

def canonicalize_version(
    version: Union[Version, str], *, strip_trailing_zero: bool = True
) -> str:
    """
    This is very similar to Version.__str__, but has one subtle difference
    with the way it handles the release segment.
    """
    if isinstance(version, str):
        try:
            parsed = Version(version)
        except InvalidVersion:
            # Legacy versions cannot be normalized
            return version
    else:
        parsed = version

    parts = []

    # Epoch
    if parsed.epoch != 0:
        parts.append(f"{parsed.epoch}!")

    # Release segment
    release_segment = ".".join(str(x) for x in parsed.release)
    if strip_trailing_zero:
        # NB: This strips trailing '.0's to normalize
        release_segment = re.sub(r"(\.0)+$", "", release_segment)
    parts.append(release_segment)

    # Pre-release
    if parsed.pre is not None:
        parts.append("".join(str(x) for x in parsed.pre))

    # Post-release
    if parsed.post is not None:
        parts.append(f".post{parsed.post}")

    # Development release
    if parsed.dev is not None:
        parts.append(f".dev{parsed.dev}")

    # Local version segment
    if parsed.local is not None:
        parts.append(f"+{parsed.local}")

    return "".join(parts)

Implementation

String canonicalize_version({
  required Object? version,
  bool strip_trailing_zero = true,
}) =>
    getFunction("canonicalize_version").call(
      <Object?>[
        version,
      ],
      kwargs: <String, Object?>{
        "strip_trailing_zero": strip_trailing_zero,
      },
    );