import argparse
from collections.abc import Iterator
from typing import Any, Dict, List, Optional, Tuple

from _typeshed import Incomplete

TRANSLATION_CATALOG: Any
MODULE_NAME: Any
LOGGER: Any
VERSION: Any
PROJECT_URL: str
STANDARD_BAG_INFO_HEADERS: Any
CHECKSUM_ALGOS: Any
DEFAULT_CHECKSUMS: Any
HASH_BLOCK_SIZE: Any
open_text_file: Any
UNICODE_BYTE_ORDER_MARK: str

class Bag:
    valid_files: Any = ...
    valid_directories: Any = ...
    tags: Any = ...
    info: dict[str, str] = ...
    entries: Any = ...
    normalized_filesystem_names: Any = ...
    normalized_manifest_names: Any = ...
    algorithms: Any = ...
    tag_file_name: Any = ...
    path: Any = ...
    def __init__(self, path: Any | None = ...) -> None: ...
    @property
    def algs(self) -> list[str]: ...
    @property
    def version(self) -> str: ...
    def manifest_files(self) -> Iterator[str]: ...
    def tagmanifest_files(self) -> None: ...
    def compare_manifests_with_fs(self) -> tuple[list[str], list[str]]: ...
    def compare_fetch_with_fs(self) -> list[str]: ...
    def payload_files(self) -> Iterator[str]: ...
    def payload_entries(self) -> dict[str, str]: ...
    def save(self, processes: int = ..., manifests: bool = ...) -> None: ...
    def tagfile_entries(self) -> dict[str, str]: ...
    def missing_optional_tagfiles(self) -> Iterator[str]: ...
    def fetch_entries(self) -> Iterator[tuple[str, str, str]]: ...
    def files_to_be_fetched(self) -> Iterator[str]: ...
    def has_oxum(self) -> bool: ...
    def validate(
        self, processes: int = ..., fast: bool = ..., completeness_only: bool = ...
    ) -> bool: ...
    def is_valid(self, fast: bool = ..., completeness_only: bool = ...) -> bool: ...
    def validate_fetch(self) -> None: ...
