SYMBOL INDEX (238 symbols across 51 files) FILE: src/gitingest/__main__.py class _CLIArgs (line 22) | class _CLIArgs(TypedDict): function main (line 79) | def main(**cli_kwargs: Unpack[_CLIArgs]) -> None: function _async_main (line 117) | async def _async_main( FILE: src/gitingest/clone.py function clone_repo (line 32) | async def clone_repo(config: CloneConfig, *, token: str | None = None) -... function _perform_post_clone_operations (line 130) | async def _perform_post_clone_operations( FILE: src/gitingest/entrypoint.py function ingest_async (line 35) | async def ingest_async( function ingest (line 151) | def ingest( function _override_branch_and_tag (line 225) | def _override_branch_and_tag(query: IngestionQuery, branch: str | None, ... function _apply_gitignores (line 262) | def _apply_gitignores(query: IngestionQuery) -> None: function _clone_repo_if_remote (line 276) | async def _clone_repo_if_remote(query: IngestionQuery, *, token: str | N... function _handle_remove_readonly (line 307) | def _handle_remove_readonly( function _write_output (line 333) | async def _write_output(tree: str, content: str, target: str | None) -> ... FILE: src/gitingest/ingestion.py function ingest_query (line 21) | def ingest_query(query: IngestionQuery) -> tuple[str, str, str]: function _process_node (line 123) | def _process_node(node: FileSystemNode, query: IngestionQuery, stats: Fi... function _process_symlink (line 187) | def _process_symlink(path: Path, parent_node: FileSystemNode, stats: Fil... function _process_file (line 216) | def _process_file(path: Path, parent_node: FileSystemNode, stats: FileSy... function limit_exceeded (line 276) | def limit_exceeded(stats: FileSystemStats, depth: int) -> bool: FILE: src/gitingest/output_formatter.py function format_node (line 27) | def format_node(node: FileSystemNode, query: IngestionQuery) -> tuple[st... function _create_summary_prefix (line 65) | def _create_summary_prefix(query: IngestionQuery, *, single_file: bool =... function _gather_file_contents (line 105) | def _gather_file_contents(node: FileSystemNode) -> str: function _create_tree_structure (line 129) | def _create_tree_structure( function _format_token_count (line 181) | def _format_token_count(text: str) -> str | None: FILE: src/gitingest/query_parser.py function parse_remote_repo (line 25) | async def parse_remote_repo(source: str, token: str | None = None) -> In... function parse_local_dir_path (line 122) | def parse_local_dir_path(path_str: str) -> IngestionQuery: function _configure_branch_or_tag (line 141) | async def _configure_branch_or_tag( FILE: src/gitingest/schemas/cloning.py class CloneConfig (line 8) | class CloneConfig(BaseModel): # pylint: disable=too-many-instance-attri... FILE: src/gitingest/schemas/filesystem.py class FileSystemNodeType (line 20) | class FileSystemNodeType(Enum): class FileSystemStats (line 29) | class FileSystemStats: class FileSystemNode (line 37) | class FileSystemNode: # pylint: disable=too-many-instance-attributes method sort_children (line 53) | def sort_children(self) -> None: method content_string (line 87) | def content_string(self) -> str: method content (line 107) | def content(self) -> str: # pylint: disable=too-many-return-statements FILE: src/gitingest/schemas/ingestion.py class IngestionQuery (line 14) | class IngestionQuery(BaseModel): # pylint: disable=too-many-instance-at... method extract_clone_config (line 74) | def extract_clone_config(self) -> CloneConfig: FILE: src/gitingest/utils/auth.py function resolve_token (line 10) | def resolve_token(token: str | None) -> str | None: FILE: src/gitingest/utils/compat_func.py function readlink (line 7) | def readlink(path: Path) -> Path: function removesuffix (line 26) | def removesuffix(s: str, suffix: str) -> str: FILE: src/gitingest/utils/exceptions.py class AsyncTimeoutError (line 4) | class AsyncTimeoutError(Exception): class InvalidNotebookError (line 12) | class InvalidNotebookError(Exception): method __init__ (line 15) | def __init__(self, message: str) -> None: class InvalidGitHubTokenError (line 19) | class InvalidGitHubTokenError(ValueError): method __init__ (line 22) | def __init__(self) -> None: FILE: src/gitingest/utils/file_utils.py function _get_preferred_encodings (line 20) | def _get_preferred_encodings() -> list[str]: function _read_chunk (line 36) | def _read_chunk(path: Path) -> bytes | None: function _decodes (line 57) | def _decodes(chunk: bytes, encoding: str) -> bool: FILE: src/gitingest/utils/git_utils.py function is_github_host (line 32) | def is_github_host(url: str) -> bool: function run_command (line 50) | async def run_command(*args: str) -> tuple[bytes, bytes]: function ensure_git_installed (line 86) | async def ensure_git_installed() -> None: function check_repo_exists (line 123) | async def check_repo_exists(url: str, token: str | None = None) -> bool: function _parse_github_url (line 149) | def _parse_github_url(url: str) -> tuple[str, str, str]: function fetch_remote_branches_or_tags (line 187) | async def fetch_remote_branches_or_tags(url: str, *, ref_type: str, toke... function create_git_repo (line 246) | def create_git_repo(local_path: str, url: str, token: str | None = None)... function create_git_auth_header (line 286) | def create_git_auth_header(token: str, url: str = "https://github.com") ... function create_authenticated_url (line 317) | def create_authenticated_url(url: str, token: str | None = None) -> str: function git_auth_context (line 357) | def git_auth_context(url: str, token: str | None = None) -> Generator[tu... function validate_github_token (line 381) | def validate_github_token(token: str) -> None: function checkout_partial_clone (line 399) | async def checkout_partial_clone(config: CloneConfig, token: str | None)... function resolve_commit (line 428) | async def resolve_commit(config: CloneConfig, token: str | None) -> str: function _resolve_ref_to_sha (line 455) | async def _resolve_ref_to_sha(url: str, pattern: str, token: str | None ... function _pick_commit_sha (line 499) | def _pick_commit_sha(lines: Iterable[str]) -> str | None: FILE: src/gitingest/utils/ignore_patterns.py function load_ignore_patterns (line 171) | def load_ignore_patterns(root: Path, filename: str) -> set[str]: function _parse_ignore_file (line 200) | def _parse_ignore_file(ignore_file: Path, root: Path) -> set[str]: FILE: src/gitingest/utils/ingestion_utils.py function _should_include (line 13) | def _should_include(path: Path, base_path: Path, include_patterns: set[s... function _should_exclude (line 43) | def _should_exclude(path: Path, base_path: Path, ignore_patterns: set[st... function _relative_or_none (line 69) | def _relative_or_none(path: Path, base: Path) -> Path | None: FILE: src/gitingest/utils/logging_config.py function json_sink (line 18) | def json_sink(message: Any) -> None: # noqa: ANN401 function format_extra_fields (line 54) | def format_extra_fields(record: dict) -> str: function extra_filter (line 85) | def extra_filter(record: dict) -> dict: class InterceptHandler (line 105) | class InterceptHandler(logging.Handler): method emit (line 108) | def emit(self, record: logging.LogRecord) -> None: function configure_logging (line 128) | def configure_logging() -> None: function get_logger (line 180) | def get_logger(name: str | None = None) -> logger.__class__: FILE: src/gitingest/utils/notebook.py function process_notebook (line 19) | def process_notebook(file: Path, *, include_output: bool = True) -> str: function _process_cell (line 77) | def _process_cell(cell: dict[str, Any], *, include_output: bool) -> str ... function _extract_output (line 128) | def _extract_output(output: dict[str, Any]) -> list[str]: FILE: src/gitingest/utils/os_utils.py function ensure_directory_exists_or_create (line 6) | async def ensure_directory_exists_or_create(path: Path) -> None: FILE: src/gitingest/utils/pattern_utils.py function process_patterns (line 13) | def process_patterns( function _parse_patterns (line 48) | def _parse_patterns(patterns: str | Iterable[str]) -> set[str]: FILE: src/gitingest/utils/query_parser_utils.py class PathKind (line 31) | class PathKind(StrEnum): function _fallback_to_root (line 40) | async def _fallback_to_root(query: IngestionQuery, token: str | None, wa... function _normalise_source (line 65) | async def _normalise_source(raw: str, token: str | None) -> ParseResult: function _try_domains_for_user_and_repo (line 101) | async def _try_domains_for_user_and_repo(user_name: str, repo_name: str,... function _is_valid_git_commit_hash (line 133) | def _is_valid_git_commit_hash(commit: str) -> bool: function _validate_host (line 154) | def _validate_host(host: str) -> None: function _looks_like_git_host (line 178) | def _looks_like_git_host(host: str) -> bool: function _validate_url_scheme (line 199) | def _validate_url_scheme(scheme: str) -> None: function _get_user_and_repo_from_path (line 219) | def _get_user_and_repo_from_path(path: str) -> tuple[str, str]: FILE: src/gitingest/utils/timeout_wrapper.py function async_timeout (line 14) | def async_timeout(seconds: int) -> Callable[[Callable[P, Awaitable[T]]],... FILE: src/server/main.py function health_check (line 96) | async def health_check() -> dict[str, str]: function head_root (line 108) | async def head_root() -> HTMLResponse: function robots (line 124) | async def robots() -> FileResponse: function llm_txt (line 140) | async def llm_txt() -> FileResponse: function custom_swagger_ui (line 156) | async def custom_swagger_ui(request: Request) -> HTMLResponse: function openapi_json_get (line 178) | def openapi_json_get() -> JSONResponse: function openapi_json (line 195) | def openapi_json() -> JSONResponse: FILE: src/server/metrics_server.py function metrics (line 23) | async def metrics() -> HTMLResponse: function start_metrics_server (line 41) | def start_metrics_server(host: str = "127.0.0.1", port: int = 9090) -> N... FILE: src/server/models.py class PatternType (line 18) | class PatternType(str, Enum): class IngestRequest (line 25) | class IngestRequest(BaseModel): method validate_input_text (line 51) | def validate_input_text(cls, v: str) -> str: method validate_pattern (line 60) | def validate_pattern(cls, v: str) -> str: class IngestSuccessResponse (line 65) | class IngestSuccessResponse(BaseModel): class IngestErrorResponse (line 102) | class IngestErrorResponse(BaseModel): class S3Metadata (line 119) | class S3Metadata(BaseModel): class QueryForm (line 138) | class QueryForm(BaseModel): method as_form (line 163) | def as_form( FILE: src/server/query_processor.py function _cleanup_repository (line 35) | def _cleanup_repository(clone_config: CloneConfig) -> None: function _check_s3_cache (line 46) | async def _check_s3_cache( function _store_digest_content (line 139) | def _store_digest_content( function _generate_digest_url (line 200) | def _generate_digest_url(query: IngestionQuery) -> str: function process_query (line 229) | async def process_query( function _print_query (line 345) | def _print_query(url: str, max_file_size: int, pattern_type: str, patter... function _print_error (line 373) | def _print_error(url: str, exc: Exception, max_file_size: int, pattern_t... function _print_success (line 402) | def _print_success(url: str, max_file_size: int, pattern_type: str, patt... FILE: src/server/routers/dynamic.py function catch_all (line 12) | async def catch_all(request: Request, full_path: str) -> HTMLResponse: FILE: src/server/routers/index.py function home (line 12) | async def home(request: Request) -> HTMLResponse: FILE: src/server/routers/ingest.py function api_ingest (line 24) | async def api_ingest( function api_ingest_get (line 57) | async def api_ingest_get( function download_ingest (line 98) | async def download_ingest( FILE: src/server/routers_utils.py function _perform_ingestion (line 20) | async def _perform_ingestion( FILE: src/server/s3_utils.py class S3UploadError (line 30) | class S3UploadError(Exception): function is_s3_enabled (line 34) | def is_s3_enabled() -> bool: function get_s3_config (line 39) | def get_s3_config() -> dict[str, str | None]: function get_s3_bucket_name (line 50) | def get_s3_bucket_name() -> str: function get_s3_alias_host (line 55) | def get_s3_alias_host() -> str | None: function generate_s3_file_path (line 60) | def generate_s3_file_path( function create_s3_client (line 133) | def create_s3_client() -> BaseClient: function upload_to_s3 (line 149) | def upload_to_s3(content: str, s3_file_path: str, ingest_id: UUID) -> str: function upload_metadata_to_s3 (line 246) | def upload_metadata_to_s3(metadata: S3Metadata, s3_file_path: str, inges... function get_metadata_from_s3 (line 345) | def get_metadata_from_s3(s3_file_path: str) -> S3Metadata | None: function _build_s3_url (line 389) | def _build_s3_url(key: str) -> str: function _check_object_tags (line 405) | def _check_object_tags(s3_client: BaseClient, bucket_name: str, key: str... function check_s3_object_exists (line 415) | def check_s3_object_exists(s3_file_path: str) -> bool: function get_s3_url_for_ingest_id (line 486) | def get_s3_url_for_ingest_id(ingest_id: UUID) -> str | None: FILE: src/server/server_config.py function get_version_info (line 31) | def get_version_info() -> dict[str, str]: FILE: src/server/server_utils.py function rate_limit_exception_handler (line 18) | async def rate_limit_exception_handler(request: Request, exc: Exception)... class Colors (line 47) | class Colors: FILE: src/static/js/git.js function waitForStars (line 1) | function waitForStars() { FILE: src/static/js/git_form.js function changePattern (line 2) | function changePattern() { function toggleAccessSettings (line 24) | function toggleAccessSettings() { FILE: src/static/js/index.js function submitExample (line 1) | function submitExample(repoName) { FILE: src/static/js/navbar.js function formatStarCount (line 2) | function formatStarCount(count) { function fetchGitHubStars (line 8) | async function fetchGitHubStars() { FILE: src/static/js/posthog.js function g (line 9) | function g(t, e) { FILE: src/static/js/utils.js function getFileName (line 1) | function getFileName(element) { function toggleFile (line 30) | function toggleFile(element) { function copyText (line 58) | function copyText(className) { function showLoading (line 105) | function showLoading() { function showResults (line 110) | function showResults() { function showError (line 115) | function showError(msg) { function collectFormData (line 125) | function collectFormData(form) { function setButtonLoadingState (line 143) | function setButtonLoadingState(submitButton, isLoading) { function handleSuccessfulResponse (line 171) | function handleSuccessfulResponse(data) { function handleSubmit (line 203) | function handleSubmit(event, showLoadingSpinner = false) { function copyFullDigest (line 277) | function copyFullDigest() { function downloadFullDigest (line 301) | function downloadFullDigest() { function logSliderToSize (line 345) | function logSliderToSize(position) { function initializeSlider (line 355) | function initializeSlider() { function formatSize (line 378) | function formatSize(sizeInKB) { function setupGlobalEnterHandler (line 387) | function setupGlobalEnterHandler() { FILE: tests/conftest.py function get_ensure_git_installed_call_count (line 30) | def get_ensure_git_installed_call_count() -> int: function sample_query (line 50) | def sample_query() -> IngestionQuery: function temp_directory (line 74) | def temp_directory(tmp_path: Path) -> Path: function write_notebook (line 136) | def write_notebook(tmp_path: Path) -> WriteNotebookFunc: function stub_resolve_sha (line 162) | def stub_resolve_sha(mocker: MockerFixture) -> dict[str, AsyncMock]: function stub_branches (line 182) | def stub_branches(mocker: MockerFixture) -> Callable[[list[str]], None]: function repo_exists_true (line 205) | def repo_exists_true(mocker: MockerFixture) -> AsyncMock: function run_command_mock (line 211) | def run_command_mock(mocker: MockerFixture) -> AsyncMock: function gitpython_mocks (line 227) | def gitpython_mocks(mocker: MockerFixture) -> dict[str, MagicMock]: function _setup_gitpython_mocks (line 232) | def _setup_gitpython_mocks(mocker: MockerFixture) -> dict[str, MagicMock]: function _fake_run_command (line 275) | async def _fake_run_command(*args: str) -> tuple[bytes, bytes]: FILE: tests/query_parser/test_git_host_agnostic.py function test_parse_query_without_host (line 31) | async def test_parse_query_without_host( FILE: tests/query_parser/test_query_parser.py function test_parse_url_valid_https (line 42) | async def test_parse_url_valid_https(url: str, stub_resolve_sha: dict[st... function test_parse_url_valid_http (line 51) | async def test_parse_url_valid_http(url: str, stub_resolve_sha: dict[str... function test_parse_url_invalid (line 57) | async def test_parse_url_invalid(stub_resolve_sha: dict[str, AsyncMock])... function test_parse_query_basic (line 74) | async def test_parse_query_basic(url: str, stub_resolve_sha: dict[str, A... function test_parse_query_mixed_case (line 90) | async def test_parse_query_mixed_case(stub_resolve_sha: dict[str, AsyncM... function test_parse_url_with_subpaths (line 106) | async def test_parse_url_with_subpaths( function test_parse_url_invalid_repo_structure (line 129) | async def test_parse_url_invalid_repo_structure(stub_resolve_sha: dict[s... function test_parse_local_dir_path_local_path (line 144) | async def test_parse_local_dir_path_local_path() -> None: function test_parse_local_dir_path_relative_path (line 160) | async def test_parse_local_dir_path_relative_path() -> None: function test_parse_remote_repo_empty_source (line 176) | async def test_parse_remote_repo_empty_source(stub_resolve_sha: dict[str... function test_parse_url_branch_and_commit_distinction (line 199) | async def test_parse_url_branch_and_commit_distinction( function test_parse_local_dir_path_uuid_uniqueness (line 222) | async def test_parse_local_dir_path_uuid_uniqueness() -> None: function test_parse_url_with_query_and_fragment (line 237) | async def test_parse_url_with_query_and_fragment(stub_resolve_sha: dict[... function test_parse_url_unsupported_host (line 254) | async def test_parse_url_unsupported_host(stub_resolve_sha: dict[str, As... function test_parse_query_with_branch (line 270) | async def test_parse_query_with_branch() -> None: function test_parse_repo_source_with_various_url_patterns (line 304) | async def test_parse_repo_source_with_various_url_patterns( function _assert_basic_repo_fields (line 330) | async def _assert_basic_repo_fields(url: str, sha_mock: AsyncMock) -> In... FILE: tests/server/test_flow_integration.py function test_client (line 21) | def test_client() -> Generator[TestClient, None, None]: function mock_static_files (line 29) | def mock_static_files(mocker: MockerFixture) -> None: function cleanup_tmp_dir (line 37) | def cleanup_tmp_dir() -> Generator[None, None, None]: function test_remote_repository_analysis (line 49) | async def test_remote_repository_analysis(request: pytest.FixtureRequest... function test_invalid_repository_url (line 74) | async def test_invalid_repository_url(request: pytest.FixtureRequest) ->... function test_large_repository (line 95) | async def test_large_repository(request: pytest.FixtureRequest) -> None: function test_concurrent_requests (line 119) | async def test_concurrent_requests(request: pytest.FixtureRequest) -> None: function test_large_file_handling (line 148) | async def test_large_file_handling(request: pytest.FixtureRequest) -> None: function test_repository_with_patterns (line 171) | async def test_repository_with_patterns(request: pytest.FixtureRequest) ... FILE: tests/test_cli.py function test_cli_writes_file (line 37) | def test_cli_writes_file( function test_cli_with_stdout_output (line 62) | def test_cli_with_stdout_output() -> None: function _invoke_isolated_cli_runner (line 93) | def _invoke_isolated_cli_runner(args: list[str]) -> Result: FILE: tests/test_clone.py function test_clone_with_commit (line 34) | async def test_clone_with_commit(repo_exists_true: AsyncMock, gitpython_... function test_clone_nonexistent_repository (line 70) | async def test_clone_nonexistent_repository(repo_exists_true: AsyncMock)... function test_check_repo_exists (line 100) | async def test_check_repo_exists( function test_clone_without_commit (line 121) | async def test_clone_without_commit(repo_exists_true: AsyncMock, gitpyth... function test_clone_creates_parent_directory (line 149) | async def test_clone_creates_parent_directory(tmp_path: Path, gitpython_... function test_clone_with_specific_subpath (line 170) | async def test_clone_with_specific_subpath(gitpython_mocks: dict) -> None: function test_clone_with_include_submodules (line 192) | async def test_clone_with_include_submodules(gitpython_mocks: dict) -> N... function test_check_repo_exists_with_auth_token (line 209) | async def test_check_repo_exists_with_auth_token(mocker: MockerFixture) ... FILE: tests/test_git_utils.py function test_validate_github_token_valid (line 35) | def test_validate_github_token_valid(token: str) -> None: function test_validate_github_token_invalid (line 52) | def test_validate_github_token_invalid(token: str) -> None: function test_create_git_repo (line 81) | def test_create_git_repo( function test_create_git_auth_header (line 113) | def test_create_git_auth_header(token: str) -> None: function test_create_git_repo_helper_calls (line 129) | def test_create_git_repo_helper_calls( function test_is_github_host (line 178) | def test_is_github_host(url: str, *, expected: bool) -> None: function test_create_git_auth_header_with_ghe_url (line 195) | def test_create_git_auth_header_with_ghe_url(token: str, url: str, expec... function test_create_git_repo_with_ghe_urls (line 234) | def test_create_git_repo_with_ghe_urls( function test_create_git_repo_ignores_non_github_urls (line 264) | def test_create_git_repo_ignores_non_github_urls( FILE: tests/test_gitignore_feature.py function repo_fixture (line 12) | def repo_fixture(tmp_path: Path) -> Path: function test_load_gitignore_patterns (line 35) | def test_load_gitignore_patterns(tmp_path: Path) -> None: function test_ingest_with_gitignore (line 52) | async def test_ingest_with_gitignore(repo_path: Path) -> None: FILE: tests/test_ingestion.py function test_run_ingest_query (line 22) | def test_run_ingest_query(temp_directory: Path, sample_query: IngestionQ... class PatternScenario (line 55) | class PatternScenario(TypedDict): function test_include_ignore_patterns (line 201) | def test_include_ignore_patterns( FILE: tests/test_notebook_utils.py function test_process_notebook_all_cells (line 14) | def test_process_notebook_all_cells(write_notebook: WriteNotebookFunc) -... function test_process_notebook_with_worksheets (line 48) | def test_process_notebook_with_worksheets(write_notebook: WriteNotebookF... function test_process_notebook_multiple_worksheets (line 80) | def test_process_notebook_multiple_worksheets(write_notebook: WriteNoteb... function test_process_notebook_code_only (line 118) | def test_process_notebook_code_only(write_notebook: WriteNotebookFunc) -... function test_process_notebook_markdown_only (line 139) | def test_process_notebook_markdown_only(write_notebook: WriteNotebookFun... function test_process_notebook_raw_only (line 161) | def test_process_notebook_raw_only(write_notebook: WriteNotebookFunc) ->... function test_process_notebook_empty_cells (line 183) | def test_process_notebook_empty_cells(write_notebook: WriteNotebookFunc)... function test_process_notebook_invalid_cell_type (line 206) | def test_process_notebook_invalid_cell_type(write_notebook: WriteNoteboo... function test_process_notebook_with_output (line 225) | def test_process_notebook_with_output(write_notebook: WriteNotebookFunc)... FILE: tests/test_pattern_utils.py function test_process_patterns_empty_patterns (line 7) | def test_process_patterns_empty_patterns() -> None: function test_parse_patterns_valid (line 20) | def test_parse_patterns_valid() -> None: function test_process_patterns_include_and_ignore_overlap (line 33) | def test_process_patterns_include_and_ignore_overlap() -> None: FILE: tests/test_summary.py function test_ingest_summary (line 28) | def test_ingest_summary(path_type: str, path: str, ref_type: str, ref: s... function _calculate_expected_lines (line 86) | def _calculate_expected_lines(ref_type: str, *, is_main_branch: bool) ->...