#!/usr/bin/env python# -*- coding: utf-8 -*-## This file is part of the `pypath` python module## Copyright 2014-2023# EMBL, EMBL-EBI, Uniklinik RWTH Aachen, Heidelberg University## Authors: see the file `README.rst`# Contact: Dénes Türei (turei.denes@gmail.com)## Distributed under the GPLv3 License.# See accompanying file LICENSE.txt or copy at# https://www.gnu.org/licenses/gpl-3.0.html## Website: https://pypath.omnipathdb.org/#from__future__importannotationsimportreimporttimeimportdatetimeimporttimeloopimportpypath.share.sessionassession_modimportpypath.share.settingsassettingsimportpypath.inputs.uniprotasuniprot_logger=session_mod.Logger(name='uniprot_db')db={}_cleanup_period=settings.get('mapper_cleanup_interval')_lifetime=300_last_used={}
[docs]definit_db(organism=9606,swissprot=None):_swissprot=uniprot._swissprot_param(swissprot)_logger._log('Loading list of all UniProt IDs for ''organism `%u` (only SwissProt: %s).'%(organism,str(swissprot),))key=(organism,_swissprot)globals()['db'][key]=uniprot._all_uniprots(organism=organism,swissprot=swissprot,)globals()['_last_used'][key]=time.time()
[docs]defis_uniprot(name,organism=9606,swissprot=None):""" Tells if ``name`` is a UniProt ID of ``organism``. If ``swissprot`` is None then both SwissProt and TrEMBL IDs will be considered. """returnnameinget_db(organism=organism,swissprot=swissprot)
[docs]defis_swissprot(name,organism=9606):""" Tells if ``name`` is a SwissProt ID of ``organism``. For TrEMBL IDs returns False. """returnis_uniprot(name,organism=organism,swissprot=True)
[docs]defis_trembl(name,organism=9606):""" Tells if ``name`` is a TrEMBL ID of ``organism``. For SwissProt IDs returns False. """returnis_uniprot(name,organism=organism,swissprot=False)
_cleanup_timeloop=timeloop.Timeloop()_cleanup_timeloop.logger.setLevel(9999)@_cleanup_timeloop.job(interval=datetime.timedelta(seconds=_cleanup_period))def_cleanup():keys=list(globals()['db'].keys())forkeyinkeys:iftime.time()-globals()['_last_used'][key]>_lifetime:_remove(key)_cleanup_timeloop.start(block=False)def_remove(key):ifkeyinglobals()['db']:_logger._log('Removing UniProt ID list for ''organism `%u` (SwissProt: %s)'%(key[0],str(key[1]),))delglobals()['db'][key]ifkeyinglobals()['_last_used']:delglobals()['_last_used'][key]