Skip to content

dbconnection_lite

ensembl.io.genomio.database.dbconnection_lite

Simplified Database interface to an Ensembl database, to make access to metadata easier and faster.

DBConnectionLite

Bases: DBConnection

Extension to get metadata directly from a database, assuming it has a metadata table.

Source code in src/python/ensembl/io/genomio/database/dbconnection_lite.py
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
class DBConnectionLite(DBConnection):
    """Extension to get metadata directly from a database, assuming it has a metadata table."""

    def __init__(self, url: StrURL, reflect: bool = False, **kwargs: Any) -> None:
        super().__init__(url, reflect, **kwargs)
        self._metadata: Dict[str, List] = {}

    def get_metadata(self) -> Dict[str, List]:
        """Retrieves all metadata from the `meta` table in the database.

        Returns:
            A dict of with key meta_key, and value=List of meta_value.

        """
        self._load_metadata()
        return self._metadata

    def _load_metadata(self) -> None:
        """Caches the metadata values."""

        if self._metadata:
            return

        with Session(self._engine) as session:
            meta_stmt = select(Meta)

            for meta_row in session.scalars(meta_stmt).unique().all():
                meta_key = meta_row.meta_key
                meta_value = meta_row.meta_value
                if meta_key in self._metadata:
                    self._metadata[meta_key].append(meta_value)
                else:
                    self._metadata[meta_key] = [meta_value]

    def get_meta_value(self, meta_key: str) -> Optional[str]:
        """Returns the first meta_value for a given meta_key."""

        self._load_metadata()
        try:
            return self._metadata[meta_key][0]
        except KeyError:
            logging.debug(f"No meta_key {meta_key}")
            return None

    def get_project_release(self) -> str:
        """Returns the project release number from the database name. Returns empty string if not found."""

        match = re.search(_DB_PATTERN_RELEASE, self.db_name)
        if match:
            return match.group(1)
        return ""

get_meta_value(meta_key)

Returns the first meta_value for a given meta_key.

Source code in src/python/ensembl/io/genomio/database/dbconnection_lite.py
66
67
68
69
70
71
72
73
74
def get_meta_value(self, meta_key: str) -> Optional[str]:
    """Returns the first meta_value for a given meta_key."""

    self._load_metadata()
    try:
        return self._metadata[meta_key][0]
    except KeyError:
        logging.debug(f"No meta_key {meta_key}")
        return None

get_metadata()

Retrieves all metadata from the meta table in the database.

Returns:

Type Description
Dict[str, List]

A dict of with key meta_key, and value=List of meta_value.

Source code in src/python/ensembl/io/genomio/database/dbconnection_lite.py
39
40
41
42
43
44
45
46
47
def get_metadata(self) -> Dict[str, List]:
    """Retrieves all metadata from the `meta` table in the database.

    Returns:
        A dict of with key meta_key, and value=List of meta_value.

    """
    self._load_metadata()
    return self._metadata

get_project_release()

Returns the project release number from the database name. Returns empty string if not found.

Source code in src/python/ensembl/io/genomio/database/dbconnection_lite.py
76
77
78
79
80
81
82
def get_project_release(self) -> str:
    """Returns the project release number from the database name. Returns empty string if not found."""

    match = re.search(_DB_PATTERN_RELEASE, self.db_name)
    if match:
        return match.group(1)
    return ""