SYMBOL INDEX (110 symbols across 21 files) FILE: aws_auto_inventory/cli.py function check_aws_credentials (line 19) | def check_aws_credentials(profile_name: Optional[str] = None) -> bool: function parse_args (line 40) | def parse_args() -> argparse.Namespace: function main (line 99) | def main() -> int: FILE: aws_auto_inventory/config/loader.py class ConfigLoader (line 12) | class ConfigLoader: method load_config (line 17) | def load_config(self, path: str) -> Config: method _detect_format (line 50) | def _detect_format(self, path: str) -> str: method _is_legacy_format (line 69) | def _is_legacy_format(self, config_data: Union[Dict[str, Any], list]) ... method _convert_legacy_format (line 90) | def _convert_legacy_format(self, config_data: Union[Dict[str, Any], li... FILE: aws_auto_inventory/config/models.py class ExcelConfig (line 8) | class ExcelConfig(BaseModel): class AWSConfig (line 14) | class AWSConfig(BaseModel): class Sheet (line 22) | class Sheet(BaseModel): class Inventory (line 31) | class Inventory(BaseModel): class Config (line 39) | class Config(BaseModel): method to_json (line 43) | def to_json(self): method to_yaml (line 47) | def to_yaml(self): method from_dict (line 53) | def from_dict(cls, data): FILE: aws_auto_inventory/config/validator.py class ConfigValidator (line 10) | class ConfigValidator: method validate (line 15) | def validate(self, config: Config) -> List[str]: method _validate_inventory (line 39) | def _validate_inventory(self, inventory: Inventory) -> List[str]: method _validate_aws_config (line 67) | def _validate_aws_config(self, inventory: Inventory) -> List[str]: method _validate_sheet (line 95) | def _validate_sheet(self, sheet: Sheet) -> List[str]: FILE: aws_auto_inventory/core/aws_client.py class AWSClientError (line 17) | class AWSClientError(Exception): class ThrottlingError (line 22) | class ThrottlingError(AWSClientError): method __init__ (line 24) | def __init__(self, service: str, function: str, retry_after: Optional[... class AWSClient (line 31) | class AWSClient: method __init__ (line 36) | def __init__(self, session: boto3.Session, max_retries: int = 3, retry... method call_api (line 49) | def call_api( FILE: aws_auto_inventory/core/organization.py class AccountResult (line 16) | class AccountResult: method __init__ (line 21) | def __init__( method to_dict (line 45) | def to_dict(self) -> Dict[str, Any]: class OrganizationScanner (line 61) | class OrganizationScanner: method __init__ (line 66) | def __init__(self): method get_organization_accounts (line 72) | def get_organization_accounts(self, session: boto3.Session) -> List[Di... method assume_role (line 106) | def assume_role( method scan_organization (line 149) | def scan_organization( FILE: aws_auto_inventory/core/region.py class RegionResult (line 17) | class RegionResult: method __init__ (line 22) | def __init__(self, region: str, services: List[ServiceResult]): method to_dict (line 33) | def to_dict(self) -> Dict[str, Any]: class RegionScanner (line 46) | class RegionScanner: method __init__ (line 51) | def __init__( method scan_region (line 70) | def scan_region( FILE: aws_auto_inventory/core/scan_engine.py class ScanResult (line 18) | class ScanResult: method __init__ (line 23) | def __init__( method to_dict (line 42) | def to_dict(self) -> Dict[str, Any]: class ScanEngine (line 65) | class ScanEngine: method __init__ (line 70) | def __init__( method scan (line 98) | def scan(self, config: Config) -> List[ScanResult]: method _scan_organization (line 125) | def _scan_organization(self, inventory: Inventory) -> ScanResult: method _scan_account (line 149) | def _scan_account(self, inventory: Inventory) -> ScanResult: FILE: aws_auto_inventory/core/service.py class ServiceResult (line 16) | class ServiceResult: method __init__ (line 21) | def __init__( method to_dict (line 48) | def to_dict(self) -> Dict[str, Any]: class ServiceScanner (line 65) | class ServiceScanner: method __init__ (line 70) | def __init__(self, max_retries: int = 3, retry_delay: int = 2): method scan_service (line 81) | def scan_service( class ResourceFilter (line 153) | class ResourceFilter: method apply_filters (line 158) | def apply_filters(self, results: Any, filters: Dict[str, Any]) -> Any: FILE: aws_auto_inventory/utils/logging.py function setup_logging (line 10) | def setup_logging( function get_logger (line 57) | def get_logger(name: Optional[str] = None) -> logging.Logger: FILE: aws_auto_inventory/utils/threading.py class ThreadingManager (line 17) | class ThreadingManager(Generic[T, R]): method __init__ (line 22) | def __init__(self, max_workers: Optional[int] = None): method execute (line 32) | def execute( method execute_with_progress (line 75) | def execute_with_progress( FILE: organization_scanner.py function get_organization_accounts (line 8) | def get_organization_accounts(session): function assume_role (line 36) | def assume_role(session, account_id, role_name): function scan_organization (line 68) | def scan_organization(org_role_name, scan_config, regions, output_dir, l... FILE: scan.py function get_json_from_url (line 22) | def get_json_from_url(url): class DateTimeEncoder (line 38) | class DateTimeEncoder(json.JSONEncoder): method default (line 41) | def default(self, o): function setup_logging (line 47) | def setup_logging(log_dir, log_level): function api_call_with_retry (line 67) | def api_call_with_retry(client, function_name, parameters, max_retries, ... function _get_service_data (line 103) | def _get_service_data(session, region_name, service, log, max_retries, r... function process_region (line 178) | def process_region( function display_time (line 232) | def display_time(seconds): function check_aws_credentials (line 239) | def check_aws_credentials(session): function main (line 252) | def main( FILE: scan_builder.py function build_service_sheet (line 7) | def build_service_sheet(): FILE: tests/conftest.py function aws_credentials (line 8) | def aws_credentials(): function mock_boto (line 17) | def mock_boto(): function sample_scan_config (line 23) | def sample_scan_config(): function mock_organization (line 38) | def mock_organization(mock_boto): class MockLog (line 56) | class MockLog: method __init__ (line 58) | def __init__(self): method info (line 64) | def info(self, message, *args, **kwargs): method error (line 67) | def error(self, message, *args, **kwargs): method debug (line 70) | def debug(self, message, *args, **kwargs): method warning (line 73) | def warning(self, message, *args, **kwargs): function mock_log (line 77) | def mock_log(): FILE: tests/test_api_calls.py function test_api_call_success (line 5) | def test_api_call_success(mocker): function test_api_call_with_parameters (line 16) | def test_api_call_with_parameters(mocker): function test_api_call_throttling_retry (line 28) | def test_api_call_throttling_retry(mocker): function test_api_call_max_retries_exceeded (line 45) | def test_api_call_max_retries_exceeded(mocker): function test_api_call_non_throttling_error (line 62) | def test_api_call_non_throttling_error(mocker): FILE: tests/test_config/test_loader.py function yaml_config_file (line 11) | def yaml_config_file(): function json_config_file (line 30) | def json_config_file(): function legacy_json_config_file (line 57) | def legacy_json_config_file(): function test_load_yaml_config (line 78) | def test_load_yaml_config(yaml_config_file): function test_load_json_config (line 90) | def test_load_json_config(json_config_file): function test_load_legacy_json_config (line 102) | def test_load_legacy_json_config(legacy_json_config_file): function test_file_not_found (line 120) | def test_file_not_found(): FILE: tests/test_organization.py function test_get_organization_accounts (line 4) | def test_get_organization_accounts(mock_boto, mock_organization): function test_get_organization_accounts_empty (line 16) | def test_get_organization_accounts_empty(mock_boto): function test_get_organization_accounts_pagination (line 27) | def test_get_organization_accounts_pagination(mocker): FILE: tests/test_organization_scanner.py function test_scan_organization (line 5) | def test_scan_organization(mocker, tmp_path): function test_scan_organization_role_assumption_failure (line 70) | def test_scan_organization_role_assumption_failure(mocker, tmp_path): FILE: tests/test_role_assumption.py function test_assume_role_success (line 5) | def test_assume_role_success(mocker): function test_assume_role_failure (line 41) | def test_assume_role_failure(mocker): FILE: tests/test_service_scanning.py function setup_aws_resources (line 9) | def setup_aws_resources(mock_boto): function test_process_region_s3 (line 22) | def test_process_region_s3(setup_aws_resources, aws_credentials, mock_log): function test_process_region_ec2 (line 44) | def test_process_region_ec2(setup_aws_resources, aws_credentials, mock_l...