Source code for glycosylator.resources.sequons
"""
Pre-defined sequons for protein glycosylation sites
"""
from typing import Union
from buildamol.core import Linkage
import glycosylator.resources as resources
import os
import json
DIR = os.path.dirname(__file__)
GLYCOSYLATOR_SEQUONS_FILE = os.path.join(DIR, "sequons.json")
"""
File for default sequons for protein glycosylation sites
"""
[docs]
class Sequon:
"""
A class representing a sequon pattern for glycosylation
"""
def __init__(self, id: str, pattern: str):
self.id = id
self.pattern = pattern
self.linkages = {}
[docs]
def add_linkage(self, resname: str, linkage: str):
"""
Add a linkage id that is associated with a given residue
Parameters
----------
resname : str
Residue name
linkage : str
Linkage id
"""
self.linkages[resname] = linkage
[docs]
def get_linkage(self, resname: str, _topology=None) -> "Linkage":
"""
Get the linkage id associated with a given residue
Parameters
----------
resname : str
Residue name
_topology : Topology
A particular topology to use to get the linkage from.
Returns
-------
Linkage
The Linkage object
"""
if _topology is None:
_topology = resources.get_default_topology()
l = self.linkages[resname]
return _topology.get_patch(l)
[docs]
def to_dict(self):
"""
Convert the sequon to a dictionary
Returns
-------
dict
Sequon dictionary
"""
return {
"id": self.id,
"pattern": self.pattern,
"linkages": self.linkages,
}
@classmethod
def _from_dict(cls, _dict):
"""
Create a sequon from a dictionary
Parameters
----------
_dict : dict
Sequon dictionary
Returns
-------
Sequon
Sequon
"""
sequon = cls(_dict["id"], _dict["pattern"])
sequon.linkages = _dict["linkages"]
return sequon
[docs]
def load_sequons(filename: str) -> dict:
"""
Load a json file with sequons
Parameters
----------
filename : str
Path to the json file
Returns
-------
dict
Sequons
"""
with open(filename, "r") as f:
sequons = json.load(f)
_sequons = {}
for key, val in sequons.items():
_sequons[key] = Sequon._from_dict(val)
return _sequons
SEQUONS = load_sequons(GLYCOSYLATOR_SEQUONS_FILE)
"""
Default sequons for protein glycosylation sites
"""
[docs]
def save_sequons(filename: str):
"""
Save the current sequon regex patterns to a json file
Parameters
----------
filename : str
Path to the json file
"""
with open(filename, "w") as f:
sequons = {k: v.to_dict() for k, v in SEQUONS.items()}
json.dump(sequons, f, indent=4)
[docs]
def get_sequon(key: str) -> "Sequon":
"""
Get a sequon regex pattern
Parameters
----------
key : str
Sequon key
Returns
-------
Sequon or None
"""
return SEQUONS.get(key, None)
[docs]
def add_sequon(
sequon_or_pattern: Union[str, Sequon], key: str = None, overwrite: bool = False
):
"""
Add a sequon to the default sequons
Parameters
----------
sequon_or_pattern : str
Sequon object or regex pattern
key : str
Sequon key, if a regex pattern is provided.
overwrite : bool
If True, the new sequon is permanently included in the default sequons file.
"""
if isinstance(sequon_or_pattern, str):
sequon_or_pattern = Sequon(key, sequon_or_pattern)
elif key is None:
key = sequon_or_pattern.id
if overwrite:
save_sequons(GLYCOSYLATOR_SEQUONS_FILE + ".bak")
SEQUONS[key] = sequon_or_pattern
if overwrite:
save_sequons(GLYCOSYLATOR_SEQUONS_FILE)
[docs]
def restore_sequons(overwrite: bool = True):
"""
Restore the default sequon regex patterns
Parameters
----------
overwrite : bool
If True, the backup is permanently set as the default again.
"""
if not os.path.isfile(GLYCOSYLATOR_SEQUONS_FILE + ".bak"):
raise FileNotFoundError("No backup file found")
SEQUONS.update(load_sequons(GLYCOSYLATOR_SEQUONS_FILE + ".bak"))
if overwrite:
os.rename(GLYCOSYLATOR_SEQUONS_FILE + ".bak", GLYCOSYLATOR_SEQUONS_FILE)
[docs]
def set_default_sequons(sequons: dict):
"""
Set the default sequons
Parameters
----------
sequons : dict
Sequons
"""
global SEQUONS
SEQUONS = sequons
[docs]
def get_default_sequons() -> dict:
"""
Get the default sequons
Returns
-------
dict
Sequons
"""
return SEQUONS
[docs]
def available_sequons() -> list:
"""
Get the available sequons
Returns
-------
list
Sequons
"""
return list(SEQUONS.keys())
__all__ = [
"SEQUONS",
"get_sequon",
"add_sequon",
"load_sequons",
"save_sequons",
"restore_sequons",
"Sequon",
"set_default_sequons",
"get_default_sequons",
"available_sequons",
]