Source code for schrodinger.protein.gpcr.sql

"""
This module contains constants and helper functions for the sqlite database
containing sequence and residue data from the GPCR DB.

Copyright Schrodinger, LLC. All rights reserved.
"""

import sqlite3

from decorator import decorator

RESIDUES_KEYS = ('sequence_number', 'protein_segment', 'display_generic_number')
CREATE_SQL = """
CREATE TABLE residues (
residueid INTEGER PRIMARY KEY,
sequence_number INTEGER,
protein_segment TEXT,
display_generic_number TEXT
);
CREATE TABLE entries (
entryid INTEGER PRIMARY_KEY,
entry_name TEXT,
residue_numbering_scheme TEXT,
sequence TEXT,
families TEXT
);
CREATE TABLE entry_residues (
entryid INTEGER,
residueid INTEGER,
FOREIGN KEY(entryid) REFERENCES entries(entryid),
FOREIGN KEY(residueid) REFERENCES residues(residueid)
);
"""
INSERT_RESIDUE_SQL = "INSERT INTO residues VALUES (?, ?, ?, ?)"
INSERT_ENTRY_SQL = "INSERT INTO entries VALUES (?, ?, ?, ?, ?)"
INSERT_ENTRY_RESIDUES_SQL = "INSERT INTO entry_residues VALUES (?, ?)"
SELECT_RESIDUES_SQL = """
SELECT r.sequence_number, r.protein_segment, r.display_generic_number
FROM entries e
INNER JOIN entry_residues er ON e.entryid = er.entryid
INNER JOIN residues r ON r.residueid = er.residueid
WHERE e.entry_name = ?
ORDER BY r.sequence_number
"""


[docs]def get_db_filename(): # TODO determine where the database should be stored return "gpcr_data.sqlite3"
[docs]def open_database(filename=None): if filename is None: filename = get_db_filename() return sqlite3.connect(filename)
[docs]@decorator def create_conn(method, *args, **kwargs): """ Decorator for a method that takes "conn" as a keyword argument. Creates a database connection if it's not passed. """ kwargs['conn'] = kwargs.get('conn') or open_database() return method(*args, **kwargs)