PHP 8.2.30
Preview: hash.py Size: 1.64 KB
/opt/hc_python/lib/python3.12/site-packages/pip/_internal/commands/hash.py

import hashlib
import logging
import sys
from optparse import Values

from pip._internal.cli.base_command import Command
from pip._internal.cli.status_codes import ERROR, SUCCESS
from pip._internal.utils.hashes import FAVORITE_HASH, STRONG_HASHES
from pip._internal.utils.misc import read_chunks, write_output

logger = logging.getLogger(__name__)


class HashCommand(Command):
    """
    Compute a hash of a local package archive.

    These can be used with --hash in a requirements file to do repeatable
    installs.
    """

    usage = "%prog [options] <file> ..."
    ignore_require_venv = True

    def add_options(self) -> None:
        self.cmd_opts.add_option(
            "-a",
            "--algorithm",
            dest="algorithm",
            choices=STRONG_HASHES,
            action="store",
            default=FAVORITE_HASH,
            help="The hash algorithm to use: one of {}".format(
                ", ".join(STRONG_HASHES)
            ),
        )
        self.parser.insert_option_group(0, self.cmd_opts)

    def run(self, options: Values, args: list[str]) -> int:
        if not args:
            self.parser.print_usage(sys.stderr)
            return ERROR

        algorithm = options.algorithm
        for path in args:
            write_output(
                "%s:\n--hash=%s:%s", path, algorithm, _hash_of_file(path, algorithm)
            )
        return SUCCESS


def _hash_of_file(path: str, algorithm: str) -> str:
    """Return the hash digest of a file."""
    with open(path, "rb") as archive:
        hash = hashlib.new(algorithm)
        for chunk in read_chunks(archive):
            hash.update(chunk)
    return hash.hexdigest()

Directory Contents

Dirs: 1 × Files: 19

Name Size Perms Modified Actions
- drwxr-xr-x 2025-12-03 08:02:41
Edit Download
8.04 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
2.19 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
4.42 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
9.87 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
6.65 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
4.96 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
3.03 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
1.64 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
1.08 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
5.12 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
3.10 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
29.76 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
13.20 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
5.66 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
5.65 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
7.88 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
3.78 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
5.87 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download
3.93 KB lrw-r--r-- 2025-12-03 08:02:41
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).