File: _utils.py

package info (click to toggle)
typeshed 0.0~git20241223.ea91db2-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 28,756 kB
  • sloc: python: 7,741; makefile: 20; sh: 18
file content (50 lines) | stat: -rw-r--r-- 1,714 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from __future__ import annotations

import subprocess
import sys
from http.client import HTTPResponse
from typing import TYPE_CHECKING, Iterable
from urllib.request import urlopen
from zipfile import ZipFile

from mypy_protobuf.main import (  # type: ignore[import-untyped]  # pyright: ignore[reportMissingTypeStubs]
    __version__ as mypy_protobuf__version__,
)

if TYPE_CHECKING:
    from _typeshed import StrOrBytesPath, StrPath

MYPY_PROTOBUF_VERSION = mypy_protobuf__version__


def download_file(url: str, destination: StrPath) -> None:
    print(f"Downloading '{url}' to '{destination}'")
    resp: HTTPResponse
    with urlopen(url) as resp, open(destination, "wb") as file:
        file.write(resp.read())


def extract_archive(archive_path: StrPath, destination: StrPath) -> None:
    print(f"Extracting '{archive_path}' to '{destination}'")
    with ZipFile(archive_path) as file_in:
        file_in.extractall(destination)


def run_protoc(
    proto_paths: Iterable[StrPath], mypy_out: StrPath, proto_globs: Iterable[str], cwd: StrOrBytesPath | None = None
) -> str:
    """TODO: Describe parameters and return"""
    protoc_version = (
        subprocess.run([sys.executable, "-m", "grpc_tools.protoc", "--version"], capture_output=True).stdout.decode().strip()
    )
    print()
    print(protoc_version)
    protoc_args = [
        *[f"--proto_path={proto_path}" for proto_path in proto_paths],
        "--mypy_out",
        f"relax_strict_optional_primitives:{mypy_out}",
        *proto_globs,
    ]
    print("Running: protoc\n    " + "\n    ".join(protoc_args) + "\n")
    subprocess.run((sys.executable, "-m", "grpc_tools.protoc", *protoc_args), cwd=cwd, check=True)
    return protoc_version