""" projects.py AIGO is a python library for the Analysis and Inter-comparison of Gene Ontology functional annotations. see (http://code.google.com/p/aigo). Created by Michael Defoin-Platel on 21/02/2010. Copyright (c) 2010. All rights reserved. AIGO is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. """ from AIGO import logger,logFun from AIGO.Analyse import AnalyseFA from AIGO.Compare import CompareFA class Project(dict): def __init__(self, **args): self.status="New" self['allFA']=list() self['analyseFA']=AnalyseFA() self['compareFA']=CompareFA() for k,v in args.items(): self[k] = v @logFun("Loading project") def load(self, fileName): import shelve try: logger.info("File :\t%s" % fileName) shelf=shelve.open(fileName, protocol=-1) for k,v in shelf.items(): self[k]=v shelf.close() self.status="Loaded" except Exception, e: logger.handleWarning("Unable to load project %s: %s" % (fileName, str(e))) @logFun("Saving project") def save(self, fileName): import shelve try: logger.info("File :\t%s" % fileName) shelf=shelve.open(fileName, protocol=-1) shelf['fileName']=fileName for k,v in self.items(): shelf[k]=v shelf.close() self.status="Saved" except Exception, e: logger.handleWarning("Unable to save project %s: %s" % (fileName, str(e))) def addRefSet(self, refSet): self['refSet']=refSet self.status="Modified" def addGO(self, GO): self['GO']=GO self.status="Modified" def addFA(self, FA): if not self.has_key('allFA'): self['allFA']=list() self['allFA'].append(FA) self.status="Modified" def getFA(self, name): if not self.has_key('allFA'): return None ret=None for FA in self['allFA']: if FA.name==name: ret=FA return ret def removeFA(self, name): if not self.has_key('allFA'): return -1 rm=-1 for idFA,FA in enumerate(self['allFA']): if FA.name==name: rm=idFA if not rm==-1: self['allFA'].pop(rm) self.status="Modified" return rm def getLoadedFA(self): return [FA for FA in self['allFA'] if not FA.isEmpty()] def applyStat(self, statistics): ret=False if hasattr(self['analyseFA'], statistics): getattr(self['analyseFA'], statistics)(self.getLoadedFA()) self.status="Modified" ret=True return ret