SYMBOL INDEX (617 symbols across 86 files) FILE: alembic/env.py function run_migrations_offline (line 26) | def run_migrations_offline() -> None: function run_migrations_online (line 49) | def run_migrations_online() -> None: FILE: alembic/versions/20241028_1217-base_migration.py function upgrade (line 22) | def upgrade() -> None: function downgrade (line 451) | def downgrade() -> None: FILE: alembic/versions/20250312_0045-add_legacy_dependency_table.py function upgrade (line 22) | def upgrade() -> None: function downgrade (line 76) | def downgrade() -> None: FILE: alembic/versions/20250312_2244-canons.py function upgrade (line 22) | def upgrade() -> None: function downgrade (line 70) | def downgrade() -> None: FILE: alembic/versions/20250416_0223-add_ranks.py function upgrade (line 22) | def upgrade() -> None: function downgrade (line 65) | def downgrade() -> None: FILE: alembic/versions/20250422_0940-add_unique_package_to_canon_packages.py function upgrade (line 20) | def upgrade() -> None: function downgrade (line 30) | def downgrade() -> None: FILE: alembic/versions/20250508_1752-add_trgm_indexes.py function upgrade (line 20) | def upgrade() -> None: function downgrade (line 45) | def downgrade() -> None: FILE: alembic/versions/20250529_2341-rename_canons_table_and_recreate.py function upgrade (line 23) | def upgrade() -> None: function downgrade (line 78) | def downgrade() -> None: FILE: alembic/versions/20250529_2345-recreate_canon_foreign_keys.py function upgrade (line 20) | def upgrade() -> None: function downgrade (line 49) | def downgrade() -> None: FILE: api/src/app_state.rs constant TTL (line 8) | const TTL: Duration = Duration::from_secs(3600); type ProjectCacheEntry (line 11) | pub struct ProjectCacheEntry { method new (line 17) | pub fn new(data: Value) -> Self { method is_expired (line 24) | pub fn is_expired(&self) -> bool { type AppState (line 29) | pub struct AppState { FILE: api/src/db.rs function create_pool (line 7) | pub async fn create_pool() -> Pool { function get_tables (line 23) | pub async fn get_tables(client: &Client) -> Vec { function initialize_db (line 37) | pub async fn initialize_db() -> (Pool, Arc>) { FILE: api/src/handlers.rs constant RESPONSE_LIMIT (line 11) | const RESPONSE_LIMIT: i64 = 1000; type PaginationParams (line 14) | pub struct PaginationParams { type PaginatedResponse (line 20) | struct PaginatedResponse { type LeaderboardRequest (line 31) | pub struct LeaderboardRequest { type ProjectBatchRequest (line 38) | pub struct ProjectBatchRequest { function check_table_exists (line 43) | pub fn check_table_exists(table: &str, tables: &[String]) -> Option) -> impl Responder { function get_table (line 95) | pub async fn get_table( function get_table_row (line 154) | pub async fn get_table_row( function get_project (line 202) | pub async fn get_project(path: web::Path, data: web::Data>, limit: i64) -> ac... function get_top_projects (line 550) | async fn get_top_projects(data: web::Data, limit: i64) -> Http... FILE: api/src/logging.rs function setup_logger (line 3) | pub fn setup_logger() { type Logger (line 7) | pub struct Logger; method default (line 10) | pub fn default() -> actix_web::middleware::Logger { FILE: api/src/main.rs function main (line 21) | async fn main() -> std::io::Result<()> { FILE: api/src/utils.rs function get_column_names (line 11) | pub fn get_column_names(rows: &[Row]) -> Vec { function convert_optional_to_json (line 22) | pub fn convert_optional_to_json(result: Result, E>) -> V... function rows_to_json (line 32) | pub fn rows_to_json(rows: &[Row]) -> Vec { type Pagination (line 73) | pub struct Pagination { method new (line 81) | pub fn new(query: Query, total_count: i64) -> Self { function get_cached_projects (line 98) | pub fn get_cached_projects( FILE: core/config.py class PackageManager (line 12) | class PackageManager(Enum): class ExecConf (line 40) | class ExecConf: method __init__ (line 45) | def __init__(self) -> None: method __str__ (line 50) | def __str__(self): class PMConf (line 54) | class PMConf: method __init__ (line 59) | def __init__(self, pm: PackageManager, db: ConfigDB): method __str__ (line 64) | def __str__(self): class URLTypes (line 68) | class URLTypes: method __init__ (line 74) | def __init__(self, db: ConfigDB): method load_url_types (line 77) | def load_url_types(self, db: ConfigDB) -> None: method __str__ (line 83) | def __str__(self) -> str: class UserTypes (line 87) | class UserTypes: method __init__ (line 91) | def __init__(self, db: ConfigDB): method __str__ (line 95) | def __str__(self) -> str: class DependencyTypes (line 99) | class DependencyTypes: method __init__ (line 107) | def __init__(self, db: ConfigDB): method __str__ (line 115) | def __str__(self) -> str: class PackageManagers (line 119) | class PackageManagers: method __init__ (line 126) | def __init__(self, db: ConfigDB): class Config (line 134) | class Config: method __init__ (line 142) | def __init__(self, pm: PackageManager) -> None: method __str__ (line 151) | def __str__(self): FILE: core/db.py class DB (line 30) | class DB: method __init__ (line 31) | def __init__(self, logger_name: str): method insert_load_history (line 38) | def insert_load_history(self, package_manager_id: str): method print_statement (line 43) | def print_statement(self, stmt): method close (line 50) | def close(self): method search_names (line 54) | def search_names( method current_graph (line 80) | def current_graph(self, package_manager_id: UUID) -> CurrentGraph: method _build_current_urls (line 111) | def _build_current_urls( method current_urls (line 133) | def current_urls(self, urls: set[str]) -> CurrentURLs: method all_current_urls (line 147) | def all_current_urls(self) -> CurrentURLs: method load (line 159) | def load( method batch (line 169) | def batch( method ingest (line 194) | def ingest( method execute (line 264) | def execute(self, session: Session, data: list[Any], method: str, log:... method remove_all (line 280) | def remove_all(self, session: Session, data: list[Any]) -> None: class ConfigDB (line 285) | class ConfigDB(DB): method __init__ (line 286) | def __init__(self): method select_package_manager_by_name (line 289) | def select_package_manager_by_name(self, package_manager: str) -> Pack... method select_url_types_by_name (line 303) | def select_url_types_by_name(self, name: str) -> URLType: method select_source_by_name (line 307) | def select_source_by_name(self, name: str) -> Source: method select_dependency_type_by_name (line 311) | def select_dependency_type_by_name(self, name: str) -> DependsOnType: FILE: core/fetcher.py class Data (line 18) | class Data: class Fetcher (line 24) | class Fetcher: method __init__ (line 25) | def __init__(self, name: str, source: str, no_cache: bool, test: bool): method write (line 33) | def write(self, files: list[Data]): method update_symlink (line 66) | def update_symlink(self, latest_path: str): method fetch (line 75) | def fetch(self) -> bytes: method cleanup (line 87) | def cleanup(self): class TarballFetcher (line 94) | class TarballFetcher(Fetcher): method __init__ (line 95) | def __init__(self, name: str, source: str, no_cache: bool, test: bool): method fetch (line 98) | def fetch(self) -> list[Data]: class GZipFetcher (line 119) | class GZipFetcher(Fetcher): method __init__ (line 120) | def __init__( method fetch (line 133) | def fetch(self) -> list[Data]: class GitFetcher (line 143) | class GitFetcher(Fetcher): method __init__ (line 144) | def __init__(self, name: str, source: str, no_cache: bool, test: bool): method fetch (line 147) | def fetch(self) -> str: FILE: core/logger.py function as_minutes (line 10) | def as_minutes(seconds: float) -> float: class Logger (line 14) | class Logger: method __init__ (line 19) | def __init__( method print (line 26) | def print(self, msg: str): method error (line 29) | def error(self, message): method log (line 32) | def log(self, message): method debug (line 36) | def debug(self, message): method warn (line 40) | def warn(self, message): method is_verbose (line 44) | def is_verbose(self): method time_diff (line 47) | def time_diff(self): method exception (line 50) | def exception(self): method info (line 56) | def info(self, message): method warning (line 59) | def warning(self, message): FILE: core/models/__init__.py class BaseModel (line 30) | class BaseModel: method to_dict_v2 (line 32) | def to_dict_v2(self) -> dict[str, str | UUID | datetime | int | float]: class Package (line 44) | class Package(Base): method to_dict (line 75) | def to_dict(self): class PackageManager (line 85) | class PackageManager(Base): class Version (line 104) | class Version(Base): method to_dict (line 139) | def to_dict(self): class License (line 152) | class License(Base): class DependsOn (line 169) | class DependsOn(Base): method to_dict (line 207) | def to_dict(self): class DependsOnType (line 216) | class DependsOnType(Base): class LoadHistory (line 233) | class LoadHistory(Base): class Source (line 253) | class Source(Base): class URL (line 271) | class URL(Base): method to_dict (line 297) | def to_dict(self): class URLType (line 302) | class URLType(Base): class User (line 319) | class User(Base): method to_dict (line 342) | def to_dict(self): class UserVersion (line 350) | class UserVersion(Base): method to_dict (line 374) | def to_dict(self): class UserPackage (line 381) | class UserPackage(Base): method to_dict (line 405) | def to_dict(self): class PackageURL (line 412) | class PackageURL(Base): method to_dict (line 435) | def to_dict(self): class LegacyDependency (line 442) | class LegacyDependency(Base): class Canon (line 469) | class Canon(Base): class CanonPackage (line 501) | class CanonPackage(Base): class TeaRankRun (line 522) | class TeaRankRun(Base): class TeaRank (line 537) | class TeaRank(Base): FILE: core/scheduler.py class Scheduler (line 13) | class Scheduler: method __init__ (line 14) | def __init__(self, name: str, frequency: int = FREQUENCY): method start (line 21) | def start(self, task: Callable, *args): method stop (line 33) | def stop(self): method run_now (line 39) | def run_now(self, task: Callable, *args): FILE: core/structs.py class CurrentGraph (line 9) | class CurrentGraph: class URLKey (line 15) | class URLKey: class CurrentURLs (line 21) | class CurrentURLs: class Cache (line 27) | class Cache: class DiffResult (line 35) | class DiffResult: FILE: core/transformer.py class Transformer (line 20) | class Transformer: method __init__ (line 21) | def __init__(self, name: str): method finder (line 34) | def finder(self, file_name: str) -> str: method open (line 44) | def open(self, file_name: str) -> str: method canonicalize (line 49) | def canonicalize(self, url: str) -> str: method guess (line 52) | def guess(self, db_client: DB, url: str, package_managers: list[UUID])... FILE: core/utils.py function safe_int (line 6) | def safe_int(val: str) -> int | None: function build_query_params (line 13) | def build_query_params( function env_vars (line 25) | def env_vars(env_var: str, default: str) -> bool: function convert_keys_to_snake_case (line 31) | def convert_keys_to_snake_case(data: dict[str, Any]) -> dict[str, Any]: function is_github_url (line 45) | def is_github_url(url: str) -> bool: function file_exists (line 50) | def file_exists(*args) -> str: FILE: examples/sbom-meta/main.go type config (line 23) | type config struct type packageMeta (line 30) | type packageMeta struct constant packageMetaFullSQL (line 39) | packageMetaFullSQL = ` constant packageMetaSQL (line 56) | packageMetaSQL = ` function main (line 71) | func main() { function printPackagesMeta (line 159) | func printPackagesMeta(pms []packageMeta) { function formatTime (line 178) | func formatTime(val interface{}) string { function formatNumber (line 185) | func formatNumber(val interface{}) string { function dedupePackages (line 192) | func dedupePackages(pms []packageMeta) []packageMeta { function usage (line 204) | func usage() { FILE: examples/visualizer/main.py class Package (line 15) | class Package: method __init__ (line 21) | def __init__(self, id: str): method __str__ (line 27) | def __str__(self): class Graph (line 31) | class Graph(rx.PyDiGraph): method __init__ (line 32) | def __init__(self, *args, **kwargs): method _get_or_create_package (line 39) | def _get_or_create_package(self, pkg_id: str) -> Package: method safely_add_node (line 46) | def safely_add_node(self, pkg_id: str) -> int: method safely_add_nodes (line 55) | def safely_add_nodes(self, nodes: list[str]) -> list[int]: method pagerank (line 58) | def pagerank(self) -> None: method nameless_nodes (line 63) | def nameless_nodes(self) -> list[str]: method max_depth (line 66) | def max_depth(self) -> int: class DB (line 70) | class DB: method __init__ (line 73) | def __init__(self): method connect (line 89) | def connect(self) -> None: method select_id (line 99) | def select_id(self, package: str) -> int: method select_deps (line 103) | def select_deps(self, ids: list[str]) -> dict[str, dict[str, str | set... method select_name (line 119) | def select_name(self, ids: list[str]) -> list[tuple[str, str]]: function larger_query (line 124) | def larger_query(db: DB, root_package: str, max_depth: int) -> Graph: function display (line 173) | def display(graph: Graph): function draw (line 192) | def draw(graph: Graph, package: str, img_type: str = "svg"): function latest (line 267) | def latest(db: DB, package: str, depth: int, img_type: str): FILE: examples/visualizer/monitor.py class Result (line 17) | class Result: method __init__ (line 18) | def __init__(self, **kwargs): method __str__ (line 22) | def __str__(self): class MonitoredDB (line 31) | class MonitoredDB(DB): method __init__ (line 34) | def __init__(self): method _monitor_query (line 39) | def _monitor_query(self, func: Callable) -> Callable: method connect (line 50) | def connect(self): function run_monitored (line 58) | def run_monitored(func: Callable, package: str) -> Result: function compare_implementations (line 73) | def compare_implementations(package: str, runs: int = 3) -> dict[str, li... function compare_results (line 89) | def compare_results(results: dict[str, list[Result]], runs: int) -> None: FILE: package_managers/crates/db.py class CratesDB (line 20) | class CratesDB(DB): method __init__ (line 21) | def __init__(self, config: Config): method set_current_graph (line 26) | def set_current_graph(self) -> None: method set_current_urls (line 29) | def set_current_urls(self, urls: set[str]) -> None: method delete_packages_by_import_id (line 32) | def delete_packages_by_import_id(self, import_ids: set[int]) -> None: method get_cargo_id_to_chai_id (line 161) | def get_cargo_id_to_chai_id(self) -> dict[str, UUID]: FILE: package_managers/crates/diff.py class Diff (line 11) | class Diff: method __init__ (line 12) | def __init__(self, config: Config, caches: Cache): method diff_pkg (line 18) | def diff_pkg(self, pkg: Crate) -> tuple[UUID, Package | None, dict | N... method diff_url (line 59) | def diff_url(self, pkg: Crate, new_urls: dict[URLKey, URL]) -> dict[UU... method diff_pkg_url (line 110) | def diff_pkg_url( method diff_deps (line 161) | def diff_deps( method _resolve_dep_type (line 312) | def _resolve_dep_type(self, dep_type: DependencyType) -> UUID: FILE: package_managers/crates/main.py function identify_deletions (line 18) | def identify_deletions(transformer: CratesTransformer, db: CratesDB) -> ... function main (line 57) | def main(config: Config, db: CratesDB): FILE: package_managers/crates/structs.py class DependencyType (line 8) | class DependencyType(IntEnum): method __str__ (line 25) | def __str__(self): class CrateDependency (line 30) | class CrateDependency: class CrateUser (line 38) | class CrateUser: class CrateLatestVersion (line 46) | class CrateLatestVersion: class Crate (line 61) | class Crate: class CanonUpdatePayload (line 74) | class CanonUpdatePayload(TypedDict): class CanonPackageUpdatePayload (line 82) | class CanonPackageUpdatePayload(TypedDict): FILE: package_managers/crates/transformer.py class CratesTransformer (line 16) | class CratesTransformer(Transformer): method __init__ (line 17) | def __init__(self, config: Config): method _open_csv (line 32) | def _open_csv(self, file_name: str) -> Generator[dict[str, str], None,... method parse (line 49) | def parse(self) -> None: method _load_latest_versions (line 156) | def _load_latest_versions(self) -> tuple[set[int], dict[int, int]]: method _load_users (line 167) | def _load_users(self) -> dict[int, CrateUser]: FILE: package_managers/debian/db.py class DebianDB (line 8) | class DebianDB(DB): method __init__ (line 9) | def __init__(self, logger_name: str, config: Config): method set_current_graph (line 13) | def set_current_graph(self) -> None: method set_current_urls (line 17) | def set_current_urls(self, urls: set[str]) -> None: method ingest_wrapper (line 21) | def ingest_wrapper(self, diff_result: DiffResult) -> None: FILE: package_managers/debian/debian_sources.py function build_package_to_source_mapping (line 6) | def build_package_to_source_mapping( function enrich_package_with_source (line 46) | def enrich_package_with_source( FILE: package_managers/debian/diff.py class DebianDiff (line 16) | class DebianDiff: method __init__ (line 17) | def __init__(self, config: Config, caches: Cache, db: DebianDB, logger... method diff_pkg (line 24) | def diff_pkg( method diff_url (line 68) | def diff_url( method diff_pkg_url (line 107) | def diff_pkg_url( method diff_deps (line 144) | def diff_deps( method _generate_chai_urls (line 280) | def _generate_chai_urls(self, debian_data: DebianData) -> list[URLKey]: FILE: package_managers/debian/main.py function fetch (line 26) | def fetch(config: Config, logger: Logger) -> tuple[GZipFetcher, GZipFetc... function diff (line 65) | def diff( function run_pipeline (line 148) | def run_pipeline(config: Config, db: DebianDB, logger: Logger): function main (line 203) | def main(config: Config, db: DebianDB, logger: Logger): FILE: package_managers/debian/parser.py class DebianParser (line 10) | class DebianParser: method __init__ (line 11) | def __init__(self, content: str): method parse (line 15) | def parse(self) -> Iterator[DebianData]: method handle_line (line 68) | def handle_line(self, obj: DebianData, line: str) -> None: method mapper (line 72) | def mapper(self, obj: DebianData, key: str, value: str) -> None: function handle_depends (line 193) | def handle_depends(dependency: str) -> Depends: function handle_maintainer (line 219) | def handle_maintainer(value: str) -> Maintainer: FILE: package_managers/debian/scripts/investigate_sources.py function parse_sources_file (line 16) | def parse_sources_file(file_path: str) -> dict[str, set[str]]: function parse_packages_file (line 94) | def parse_packages_file(file_path: str) -> dict[str, str | None]: function investigate_mapping (line 144) | def investigate_mapping(sources_file: str, packages_file: str) -> None: function main (line 217) | def main(): FILE: package_managers/debian/scripts/test_investigate_sources.py function binutils (line 9) | def binutils(): function linux (line 21) | def linux(): function test_binutils (line 86) | def test_binutils(binutils): function test_linux (line 105) | def test_linux(linux): FILE: package_managers/debian/structs.py class Maintainer (line 6) | class Maintainer: class File (line 12) | class File: class Depends (line 19) | class Depends: class Tag (line 25) | class Tag: class DebianData (line 33) | class DebianData: FILE: package_managers/homebrew/db.py class HomebrewDB (line 6) | class HomebrewDB(DB): method __init__ (line 7) | def __init__(self, logger_name: str, config: Config): method set_current_graph (line 12) | def set_current_graph(self) -> None: method set_current_urls (line 17) | def set_current_urls(self, urls: set[str]) -> None: FILE: package_managers/homebrew/diff.py class Diff (line 11) | class Diff: method __init__ (line 12) | def __init__(self, config: Config, caches: Cache): method diff_pkg (line 18) | def diff_pkg(self, pkg: Actual) -> tuple[UUID, Package | None, dict | ... method diff_url (line 60) | def diff_url( method diff_pkg_url (line 104) | def diff_pkg_url( method diff_deps (line 155) | def diff_deps( FILE: package_managers/homebrew/formulae.py class HomebrewFetcher (line 15) | class HomebrewFetcher(Fetcher): method __init__ (line 16) | def __init__(self, config: Config): method fetch (line 24) | def fetch(self) -> list[Actual]: FILE: package_managers/homebrew/main.py function main (line 15) | def main(config: Config, db: HomebrewDB) -> None: FILE: package_managers/homebrew/structs.py class Actual (line 5) | class Actual: FILE: package_managers/pkgx/db.py class PkgxDB (line 8) | class PkgxDB(DB): method __init__ (line 9) | def __init__(self, logger_name: str, config: Config): method set_current_graph (line 13) | def set_current_graph(self) -> None: method set_current_urls (line 18) | def set_current_urls(self) -> None: FILE: package_managers/pkgx/diff.py class PkgxDiff (line 15) | class PkgxDiff: method __init__ (line 16) | def __init__(self, config: Config, caches: Cache, db: DB, logger: Logg... method diff_pkg (line 23) | def diff_pkg( method diff_url (line 56) | def diff_url( method diff_pkg_url (line 97) | def diff_pkg_url( method diff_deps (line 134) | def diff_deps( FILE: package_managers/pkgx/loader.py class PkgxLoader (line 17) | class PkgxLoader(DB): method __init__ (line 18) | def __init__(self, config: Config, data: dict[str, Cache]): method load_packages (line 25) | def load_packages(self) -> None: method load_dependencies (line 101) | def load_dependencies(self) -> None: FILE: package_managers/pkgx/main.py function fetch (line 26) | def fetch(config: Config) -> GitFetcher: function run_pipeline (line 45) | def run_pipeline(config: Config, db: PkgxDB): function main (line 135) | def main(): FILE: package_managers/pkgx/parser.py class Distributable (line 23) | class Distributable: class Version (line 32) | class Version: class Dependency (line 46) | class Dependency: class EnvironmentVariable (line 52) | class EnvironmentVariable: class DependencyBlock (line 58) | class DependencyBlock: class Build (line 64) | class Build: class Test (line 72) | class Test: class PkgxPackage (line 80) | class PkgxPackage: class PkgxParser (line 94) | class PkgxParser: method __init__ (line 95) | def __init__(self, repo_path: str): method find_package_yamls (line 98) | def find_package_yamls(self) -> Iterator[tuple[Path, str]]: method is_vendored (line 116) | def is_vendored(self, data: dict[str, Any]) -> bool: method parse_package_yaml (line 124) | def parse_package_yaml(self, file_path: Path) -> PkgxPackage | None: method parse_packages (line 151) | def parse_packages(self) -> Iterator[tuple[PkgxPackage, str]]: method _parse_dependency_list (line 158) | def _parse_dependency_list( method _parse_build_section (line 222) | def _parse_build_section(self, build_data: Any, file_path_str: str) ->... method _parse_test_section (line 266) | def _parse_test_section(self, test_data: Any, file_path_str: str) -> T... method _parse_versions_section (line 300) | def _parse_versions_section( method _parse_distributable_section (line 319) | def _parse_distributable_section( method map_package_yaml_to_pkgx_package (line 339) | def map_package_yaml_to_pkgx_package( FILE: package_managers/pkgx/url.py function canonicalize (line 16) | def canonicalize(url: str) -> str: function guess (line 20) | def guess(db_client: DB, package_managers: list[UUID], url: str) -> list... function ask_pkgx (line 26) | def ask_pkgx(import_id: str) -> str | None: function special_case (line 40) | def special_case(import_id: str, logger: Logger) -> str | None: function generate_chai_urls (line 83) | def generate_chai_urls( FILE: ranker/config.py class ConfigDB (line 20) | class ConfigDB(DB): method __init__ (line 21) | def __init__(self): method get_homepage_url_type_id (line 24) | def get_homepage_url_type_id(self) -> UUID: method get_npm_pm_id (line 33) | def get_npm_pm_id(self) -> UUID: method get_canons_with_source_types (line 36) | def get_canons_with_source_types( method get_pm_id_by_name (line 53) | def get_pm_id_by_name(self, name: str | list[str]) -> UUID: class TeaRankConfig (line 69) | class TeaRankConfig: method __init__ (line 70) | def __init__(self, db: ConfigDB) -> None: method map_favorites (line 82) | def map_favorites(self, package_managers: list[str]) -> None: method personalize (line 97) | def personalize( method __str__ (line 125) | def __str__(self) -> str: class PMConfig (line 129) | class PMConfig: method __init__ (line 130) | def __init__(self, db: ConfigDB) -> None: method __str__ (line 139) | def __str__(self) -> str: class URLTypes (line 145) | class URLTypes: method __init__ (line 146) | def __init__(self, db: ConfigDB) -> None: method __str__ (line 150) | def __str__(self) -> str: class DedupeConfig (line 154) | class DedupeConfig: method __init__ (line 155) | def __init__(self, db: ConfigDB) -> None: method __str__ (line 159) | def __str__(self) -> str: class Config (line 164) | class Config: method __init__ (line 165) | def __init__(self, db: ConfigDB) -> None: method __str__ (line 171) | def __str__(self) -> str: function load_config (line 175) | def load_config() -> Config: function load_dedupe_config (line 180) | def load_dedupe_config() -> DedupeConfig: FILE: ranker/db.py class GraphDB (line 23) | class GraphDB(DB): method __init__ (line 24) | def __init__(self, legacy_pm_id: UUID, system_pm_ids: list[UUID]): method is_canon_populated (line 29) | def is_canon_populated(self) -> bool: method is_canon_package_populated (line 33) | def is_canon_package_populated(self) -> bool: method get_all_canons (line 37) | def get_all_canons(self) -> dict[str, UUID]: method get_packages_with_urls (line 43) | def get_packages_with_urls(self) -> list[tuple[UUID, str, str, str]]: method load_canonical_packages (line 61) | def load_canonical_packages(self, data: list[Canon]) -> None: method load_canonical_package_mappings (line 95) | def load_canonical_package_mappings(self, data: list[CanonPackage]) ->... method get_packages (line 141) | def get_packages(self) -> list[tuple[UUID, UUID]]: method get_dependencies (line 151) | def get_dependencies(self, package_id: UUID) -> list[tuple[UUID]]: method get_package_to_canon_mapping (line 162) | def get_package_to_canon_mapping(self) -> dict[UUID, UUID]: method get_legacy_dependencies (line 172) | def get_legacy_dependencies(self, package_id: UUID) -> list[tuple[UUID]]: method load_tea_ranks (line 182) | def load_tea_ranks(self, data: list[TeaRank]) -> None: method load_tea_rank_runs (line 188) | def load_tea_rank_runs(self, data: list[TeaRankRun]) -> None: method get_current_tea_rank_run (line 194) | def get_current_tea_rank_run(self) -> TeaRankRun | None: FILE: ranker/dedupe.py class DedupeDB (line 20) | class DedupeDB(DB): method __init__ (line 21) | def __init__(self, config: DedupeConfig): method get_current_canons (line 25) | def get_current_canons(self) -> dict[UUID, Canon]: method get_current_canon_packages (line 31) | def get_current_canon_packages(self) -> dict[UUID, dict[str, UUID]]: method get_packages_with_homepages (line 40) | def get_packages_with_homepages(self) -> list[tuple[Package, URL]]: method get_all_package_names (line 51) | def get_all_package_names(self) -> dict[UUID, str]: method ingest (line 56) | def ingest( method add_with_flush (line 78) | def add_with_flush(self, session: Session, rows: list[BaseModel]) -> N... function get_latest_homepage_per_package (line 83) | def get_latest_homepage_per_package( function build_canon_update_payload (line 114) | def build_canon_update_payload( function build_canon_package_update_payload (line 121) | def build_canon_package_update_payload( function process_deduplication_changes (line 142) | def process_deduplication_changes( function main (line 255) | def main(config: DedupeConfig, db: DedupeDB): FILE: ranker/main.py class PackageInfo (line 28) | class PackageInfo: function load_graph (line 33) | def load_graph( function main (line 98) | def main(config: Config, db: GraphDB) -> None: FILE: ranker/naming.py function compute_canon_name (line 10) | def compute_canon_name(url: str, package_name: str, existing_name: str =... function check_if_better (line 34) | def check_if_better(best_guess: str, package_name: str, existing_name: s... function extract_repo_name_from_url (line 49) | def extract_repo_name_from_url(url: str) -> str: function score_name (line 67) | def score_name(name: str, best_guess: str) -> int: function get_effective_canon_name (line 93) | def get_effective_canon_name( FILE: ranker/rx_graph.py class PackageNode (line 17) | class PackageNode: class CHAI (line 27) | class CHAI(rx.PyDiGraph): method __init__ (line 28) | def __init__(self): method add_node (line 33) | def add_node(self, node: PackageNode) -> int: method add_edge (line 40) | def add_edge(self, u: int, v: int, edge_data: Any) -> None: method generate_personalization (line 47) | def generate_personalization( method pagerank (line 57) | def pagerank( method distribute (line 66) | def distribute( FILE: ranker/utils/analyze_ranks.py function get_latest_rank_file (line 29) | def get_latest_rank_file() -> Path: function get_rank_file (line 36) | def get_rank_file(filename: str | None = None) -> Path: function load_rank_data (line 57) | def load_rank_data(file_path: Path) -> dict[str, float]: function get_output_filename (line 63) | def get_output_filename(input_path: Path) -> Path: function get_package_data (line 74) | def get_package_data(ranks: dict[str, float], db_session: Session) -> pd... function parse_args (line 122) | def parse_args() -> argparse.Namespace: function main (line 136) | def main() -> None: FILE: ranker/utils/parse_log.py function parse_log_line (line 20) | def parse_log_line(line: str) -> tuple[float, int]: function calculate_metrics (line 39) | def calculate_metrics(log_lines: list[str]) -> tuple[float, float]: function main (line 84) | def main(): FILE: scripts/chai-legacy-loader/add_package_fields.py function validate_uuid (line 21) | def validate_uuid(uuid_string: str) -> None: function process_csv (line 29) | def process_csv(input_file: str, output_file: str, package_manager_id: s... FILE: scripts/chai-legacy-loader/batch_insert_package_urls.py class ChaiPackageUrlsDB (line 19) | class ChaiPackageUrlsDB: method __init__ (line 22) | def __init__(self, logger: Logger): method load_package_id_cache (line 37) | def load_package_id_cache(self) -> dict[str, uuid.UUID]: method load_url_id_cache_from_db (line 50) | def load_url_id_cache_from_db( method batch_insert_package_urls (line 69) | def batch_insert_package_urls( method close (line 103) | def close(self): function load_url_id_cache_from_file (line 111) | def load_url_id_cache_from_file( function process_package_url_associations (line 154) | def process_package_url_associations( FILE: scripts/chai-legacy-loader/batch_insert_urls.py class ChaiDB (line 20) | class ChaiDB: method __init__ (line 23) | def __init__(self): method batch_insert_urls (line 39) | def batch_insert_urls( method close (line 89) | def close(self): function process_urls_for_batch_insert (line 98) | def process_urls_for_batch_insert( FILE: scripts/chai-legacy-loader/copy_dependencies_no_thread.py class LegacyDB (line 25) | class LegacyDB: method __init__ (line 28) | def __init__(self, input_package_manager: PackageManager): method __del__ (line 39) | def __del__(self): method get_sql_content (line 44) | def get_sql_content(self, filename: str) -> str: method create_server_cursor (line 52) | def create_server_cursor(self, sql_file: str, cursor_name: str) -> None: method fetch_batch (line 77) | def fetch_batch(self, cursor_name: str, batch_size: int) -> list[tuple]: method close_cursor (line 86) | def close_cursor(self, cursor_name: str) -> None: class ChaiDB (line 94) | class ChaiDB: method __init__ (line 97) | def __init__(self, config: Config): method _get_package_map (line 131) | def _get_package_map(self) -> dict[str, uuid.UUID]: method _load_existing_dependencies (line 149) | def _load_existing_dependencies(self, batch_size: int = BATCH_SIZE) ->... method init_copy_expert (line 179) | def init_copy_expert(self) -> None: method add_rows_to_copy_expert (line 185) | def add_rows_to_copy_expert(self, rows: list[tuple]) -> int: method add_rows_with_flush (line 220) | def add_rows_with_flush(self, rows: list[tuple], max_buffer_size=10000... method complete_copy_expert (line 233) | def complete_copy_expert(self): function main (line 255) | def main( FILE: scripts/npm-singleton/single.py class ChaiDB (line 16) | class ChaiDB(DB): method __init__ (line 17) | def __init__(self): method check_package_exists (line 20) | def check_package_exists(self, derived_id: str) -> bool: method get_package_by_derived_id (line 27) | def get_package_by_derived_id(self, derived_id: str) -> Package: method load (line 33) | def load( function get_package_info (line 71) | def get_package_info(npm_package: str) -> tuple[bool, dict, str | None]: function get_homepage (line 86) | def get_homepage(package_info: dict) -> tuple[bool, str | None]: function get_repository_url (line 95) | def get_repository_url(package_info: dict) -> tuple[bool, str | None]: function get_source_url (line 104) | def get_source_url(package_info: dict) -> tuple[bool, str | None]: function canonicalize (line 117) | def canonicalize(url: str) -> str: function get_latest_version (line 121) | def get_latest_version(package_info: dict) -> tuple[bool, str | None]: function get_version_info (line 129) | def get_version_info(package_info: dict, version: str) -> tuple[bool, di... function get_latest_version_dependencies (line 136) | def get_latest_version_dependencies( function get_latest_version_dev_dependencies (line 152) | def get_latest_version_dev_dependencies( function check_dependencies_on_chai (line 168) | def check_dependencies_on_chai( function generate_url (line 189) | def generate_url(url_type_id: UUID, url: str) -> URL: function generate_legacy_dependencies (line 193) | def generate_legacy_dependencies( function print_status_report (line 219) | def print_status_report( function process_package (line 309) | def process_package(package_name: str, dry_run: bool = False) -> bool: FILE: scripts/package_to_package/package_dependencies.py function preprocess_version_string (line 26) | def preprocess_version_string(version_str: str) -> str: function get_latest_version_info (line 176) | def get_latest_version_info(versions: list[Version]) -> Version | None: function insert_legacy_dependencies (line 232) | def insert_legacy_dependencies( function process_package_dependencies (line 272) | def process_package_dependencies(config: Config, session: Session) -> None: FILE: scripts/upgrade_canons/create_deleted_canons.py function read_package_data_from_csv (line 11) | def read_package_data_from_csv(filename: str) -> list[tuple[str, UUID]]: function process_deleted_package (line 33) | def process_deleted_package( function write_failures_csv (line 122) | def write_failures_csv( function main (line 133) | def main(): FILE: scripts/upgrade_canons/db.py class DB (line 14) | class DB: method __init__ (line 15) | def __init__(self): method get_urls_by_type (line 23) | def get_urls_by_type( method db_execute_values (line 59) | def db_execute_values( method ingest (line 77) | def ingest( method close (line 115) | def close(self): method get_canons_by_url_ids (line 119) | def get_canons_by_url_ids(self, url_ids: list[UUID]) -> list[tuple[UUI... FILE: scripts/upgrade_canons/delete_non_canonical_urls.py function write_to_csv (line 14) | def write_to_csv(filename: str, headers: list[str], data: list[tuple]): function get_all_urls (line 21) | def get_all_urls(db: DB) -> list[tuple[UUID, str]]: function identify_non_canonical_urls (line 36) | def identify_non_canonical_urls(urls: list[tuple[UUID, str]]) -> list[UU... function delete_urls_from_database (line 55) | def delete_urls_from_database(db: DB, url_ids: list[UUID], dry_run: bool... function main (line 88) | def main(dry_run: bool = False): FILE: scripts/upgrade_canons/main.py function is_one_url_canonical (line 17) | def is_one_url_canonical(urls: list[str]) -> bool: function generate_canonical_url (line 22) | def generate_canonical_url(urls: list[str]) -> str: function generate_new_url (line 31) | def generate_new_url(url: str, url_type_id: UUID, now: datetime) -> URL: function generate_new_package_url (line 36) | def generate_new_package_url( function analyze_packages_needing_canonicalization (line 44) | def analyze_packages_needing_canonicalization( function create_url_and_package_url_objects (line 77) | def create_url_and_package_url_objects( function main (line 98) | def main(db: DB, url_type: str, url_type_id: UUID, dry_run: bool): FILE: scripts/upgrade_canons/registered_projects.py function read_canon_ids_from_stdin (line 11) | def read_canon_ids_from_stdin() -> list[UUID]: function process_canon_id (line 24) | def process_canon_id(db: DB, canon_id: UUID, dry_run: bool) -> tuple[boo... function write_failures_csv (line 106) | def write_failures_csv( function main (line 117) | def main(): FILE: scripts/upgrade_canons/structs.py class URL (line 8) | class URL: class PackageURL (line 17) | class PackageURL: FILE: tests/conftest.py function mock_logger (line 28) | def mock_logger(): function mock_url_types (line 39) | def mock_url_types(): function mock_dependency_types (line 58) | def mock_dependency_types(): function mock_sources (line 79) | def mock_sources(): function mock_package_managers (line 95) | def mock_package_managers(): function mock_pm_config (line 113) | def mock_pm_config(mock_package_managers): function mock_config (line 125) | def mock_config( function mock_user_types (line 163) | def mock_user_types(): function sample_package_data (line 180) | def sample_package_data(): function mock_csv_reader (line 218) | def mock_csv_reader(): function pytest_configure (line 245) | def pytest_configure(config): function mock_db (line 257) | def mock_db(): FILE: tests/package_managers/crates/conftest.py function package_ids (line 16) | def package_ids(): function packages (line 22) | def packages(package_ids): function diff_instance (line 45) | def diff_instance(mock_config): function crate_with_dependencies (line 65) | def crate_with_dependencies(): FILE: tests/package_managers/crates/test_crates_diff_deps.py class TestDiffDeps (line 17) | class TestDiffDeps: method test_existing_dependency_no_changes (line 20) | def test_existing_dependency_no_changes( method test_dependency_changed_type (line 59) | def test_dependency_changed_type( method test_new_dependency (line 110) | def test_new_dependency( method test_removed_dependency (line 144) | def test_removed_dependency( method test_multiple_dependency_types_same_package (line 183) | def test_multiple_dependency_types_same_package( method test_multiple_dependency_types_build_vs_dev (line 234) | def test_multiple_dependency_types_build_vs_dev( FILE: tests/package_managers/debian/conftest.py function create_debian_package (line 4) | def create_debian_package( FILE: tests/package_managers/debian/test_debian_diff.py class TestDebianDifferentialLoading (line 10) | class TestDebianDifferentialLoading: method test_package_exists_url_update (line 13) | def test_package_exists_url_update(self, mock_config, mock_logger, moc... method test_package_exists_dependency_change (line 79) | def test_package_exists_dependency_change(self, mock_config, mock_logg... method test_completely_new_package (line 161) | def test_completely_new_package(self, mock_config, mock_logger, mock_db): method test_no_changes_scenario (line 208) | def test_no_changes_scenario(self, mock_config, mock_logger, mock_db): method test_package_description_update (line 243) | def test_package_description_update(self, mock_config, mock_logger, mo... method test_missing_dependency_handling (line 280) | def test_missing_dependency_handling(self, mock_config, mock_logger, m... method test_dependency_type_priority_no_change (line 310) | def test_dependency_type_priority_no_change( method test_dependency_type_change_runtime_to_build (line 356) | def test_dependency_type_change_runtime_to_build( method test_dependency_type_change_build_to_runtime (line 408) | def test_dependency_type_change_build_to_runtime( method test_dependency_type_priority_new_package (line 458) | def test_dependency_type_priority_new_package( method test_debian_specific_dependencies (line 498) | def test_debian_specific_dependencies(self, mock_config, mock_logger, ... class TestDebianDiffFunction (line 536) | class TestDebianDiffFunction: method test_duplicate_package_paragraphs (line 539) | def test_duplicate_package_paragraphs(self, mock_config, mock_logger, ... FILE: tests/package_managers/debian/test_debian_parser.py function simple_package (line 14) | def simple_package(): function simple_source (line 37) | def simple_source(): function multiline_binary (line 64) | def multiline_binary(): function build_depends (line 77) | def build_depends(): class TestDebianParser (line 86) | class TestDebianParser: method test_build_depends (line 89) | def test_build_depends(self, build_depends): method test_multiline_binary (line 104) | def test_multiline_binary(self, multiline_binary): method test_parse_package_data (line 121) | def test_parse_package_data(self, simple_package): method test_parse_source_data (line 157) | def test_parse_source_data(self, simple_source): FILE: tests/package_managers/debian/test_debian_sources.py class TestPackageSourceMapping (line 8) | class TestPackageSourceMapping: method test_build_package_to_source_mapping_with_binary_list (line 11) | def test_build_package_to_source_mapping_with_binary_list( method test_build_package_to_source_mapping_no_binary_list (line 48) | def test_build_package_to_source_mapping_no_binary_list( method test_enrich_package_with_explicit_source (line 72) | def test_enrich_package_with_explicit_source(self, mock_logger): method test_enrich_package_no_explicit_source (line 104) | def test_enrich_package_no_explicit_source(self, mock_logger): method test_enrich_package_missing_source_warning (line 129) | def test_enrich_package_missing_source_warning(self, caplog, mock_logg... method test_enrich_package_preserves_existing_fields (line 156) | def test_enrich_package_preserves_existing_fields(self, mock_logger): FILE: tests/package_managers/homebrew/conftest.py function package_ids (line 13) | def package_ids() -> dict[str, UUID]: function packages (line 19) | def packages(package_ids) -> dict[str, Package]: function diff_instance (line 58) | def diff_instance(mock_config): function homebrew_formula (line 80) | def homebrew_formula(): FILE: tests/package_managers/homebrew/test_homebrew_diff_deps.py class TestDiffDeps (line 19) | class TestDiffDeps: method test_new_package_not_in_cache (line 22) | def test_new_package_not_in_cache(self, packages, diff_instance, homeb... method test_existing_package_adding_dependency (line 45) | def test_existing_package_adding_dependency( method test_existing_package_removing_dependency (line 99) | def test_existing_package_removing_dependency( method test_existing_package_changing_dependency_type (line 147) | def test_existing_package_changing_dependency_type( method test_existing_package_no_dependency_changes (line 195) | def test_existing_package_no_dependency_changes( method test_existing_package_same_dependency_multiple_times_no_changes (line 231) | def test_existing_package_same_dependency_multiple_times_no_changes( method test_existing_package_same_dependency_multiple_times_yes_changes (line 268) | def test_existing_package_same_dependency_multiple_times_yes_changes( FILE: tests/package_managers/pkgx/test_pkgx_diff.py function create_pkgx_package (line 18) | def create_pkgx_package( class TestPkgxDifferentialLoading (line 70) | class TestPkgxDifferentialLoading: method test_package_exists_url_update (line 73) | def test_package_exists_url_update(self, mock_config, mock_logger, moc... method test_package_exists_dependency_change (line 150) | def test_package_exists_dependency_change(self, mock_config, mock_logg... method test_completely_new_package (line 224) | def test_completely_new_package(self, mock_config, mock_logger, mock_db): method test_no_changes_scenario (line 272) | def test_no_changes_scenario(self, mock_config, mock_logger, mock_db): method test_missing_dependency_handling (line 305) | def test_missing_dependency_handling(self, mock_config, mock_logger, m... method test_dependency_type_priority_no_change (line 333) | def test_dependency_type_priority_no_change( method test_dependency_type_change_runtime_to_build (line 374) | def test_dependency_type_change_runtime_to_build( method test_dependency_type_change_build_to_runtime (line 421) | def test_dependency_type_change_build_to_runtime( method test_dependency_type_priority_new_package (line 466) | def test_dependency_type_priority_new_package( method test_dependency_type_priority_with_test (line 501) | def test_dependency_type_priority_with_test( FILE: tests/package_managers/pkgx/test_special_case.py class TestSpecialCase (line 14) | class TestSpecialCase: method test_special_case_crates_io (line 17) | def test_special_case_crates_io(self, mock_logger): method test_special_case_x_org (line 24) | def test_special_case_x_org(self, mock_logger): method test_special_case_pkgx_sh (line 29) | def test_special_case_pkgx_sh(self, mock_logger): method test_special_case_no_slashes (line 36) | def test_special_case_no_slashes(self, mock_logger): method test_special_case_double_slashes (line 40) | def test_special_case_double_slashes(self, mock_logger): FILE: tests/ranker/test_compute_canon_name.py function test_extract_repo_name_from_url (line 22) | def test_extract_repo_name_from_url(url, best_guess): function test_score_name (line 37) | def test_score_name(name, best_guess, expected_score): function test_check_if_better (line 54) | def test_check_if_better(name, best_guess, package_name, expected): function test_compute_canon_name (line 83) | def test_compute_canon_name(url, package_name, existing_name, expected): FILE: tests/ranker/test_dedupe.py function ids (line 20) | def ids(): function test_packages (line 38) | def test_packages(ids): function test_urls (line 72) | def test_urls(ids): function mock_dedupe_config (line 104) | def mock_dedupe_config(ids): function mock_db (line 113) | def mock_db(): function capture_ingest_calls (line 118) | def capture_ingest_calls(mock_db): class TestDedupe (line 134) | class TestDedupe: method test_new_canon_new_mapping (line 137) | def test_new_canon_new_mapping( method test_new_canon_update_mapping (line 185) | def test_new_canon_update_mapping( method test_no_changes_needed (line 250) | def test_no_changes_needed( method test_update_existing_mapping (line 296) | def test_update_existing_mapping( method test_create_new_mapping (line 368) | def test_create_new_mapping( method test_multiple_packages_same_homepage_creates_single_canon (line 418) | def test_multiple_packages_same_homepage_creates_single_canon( method test_empty_urls_no_deduplication (line 485) | def test_empty_urls_no_deduplication( method test_canon_name_update_when_url_changes (line 544) | def test_canon_name_update_when_url_changes( method test_canon_update_with_multiple_packages (line 614) | def test_canon_update_with_multiple_packages( method test_skip_when_load_disabled (line 686) | def test_skip_when_load_disabled(self, mock_dedupe_config, mock_db): FILE: tests/ranker/test_rx_graph.py function large_chai_graph (line 26) | def large_chai_graph() -> tuple[CHAI, dict[uuid.UUID, Decimal]]: FILE: tests/scripts/upgrade_canons/test_analyze_packages_needing_canonicalization.py class TestAnalyzePackagesNeedingCanonicalization (line 11) | class TestAnalyzePackagesNeedingCanonicalization: method setup_method (line 14) | def setup_method(self): method test_case_1_should_create_canonical_url (line 23) | def test_case_1_should_create_canonical_url( method test_case_2_canonical_exists_in_database (line 73) | def test_case_2_canonical_exists_in_database( method test_case_3_canonical_already_planned (line 101) | def test_case_3_canonical_already_planned(self, mock_normalize, mock_i... method test_case_4_package_already_has_canonical (line 136) | def test_case_4_package_already_has_canonical(self, mock_is_canonical): method test_mixed_scenarios (line 167) | def test_mixed_scenarios(self, mock_normalize, mock_is_canonical): method test_empty_inputs (line 220) | def test_empty_inputs(self): method test_edge_case_empty_url_list (line 227) | def test_edge_case_empty_url_list(self, mock_normalize, mock_is_canoni...