def _common(self, row): ''' do things common to line[346]: - check for new target (via id), save old target; - do the method name lookup, and call it ''' id=row[0] if id != self.cur_id: if self.cur_target: print '_common: about to save target: %s: %d drugs, %d synonyms, %d pathways' % \ (self.cur_target.id, len(self.cur_target.drugs.all()), len(self.cur_target.targetsynonym_set.all()), len(self.cur_target.targetpathway_set.all())) self.cur_target.save() self.stats['n_targets']+=1 self.cur_target=Target(id=id, src='ttd') self.cur_target.save() # to get id; will re-save later self.cur_id=id self.targets.append(self.cur_target) method_name=self.sanitize(row[1]) try: method=getattr(self, 'on_'+method_name) method(row) except AttributeError: pass
def ondtnan(self, mo): dt_N=int(mo.group(1)) dt_attr_name=mo.group(2) # Is this a new target? if not self.cur_target or self.target_n != dt_N: if self.cur_target: # self.cur_target.save() # re-save, really self.save_target() self.cur_drug.save() self.cur_target.drugs.add(self.cur_drug) self.stats['n_targets']+=1 self.cur_target=Target(src='db') self.cur_target.syns=[] self.cur_obj=self.cur_target self.target_n=dt_N self.attr_name=dt_attr_name
class DrugcardBuilderDjango(DrugcardBuilder): attr_names={'Generic_Name':'name', # drugs 'Primary_Accession_No':'primary_acc', # drugs 'Drug_Type':'approval', # drugs 'ID':'id', # targets 'Name':'name', # targets } def __init__(self, **kwargs): self.cur_obj=None self.cur_drug=None self.cur_target=None self.attr_name=None # clear tables if called for: if 'clear_table' in kwargs and kwargs['clear_table']: print 'clearing tables...' for cls in [ Drug, DrugSynonym, DrugPathway, Target, TargetSynonym, TargetPathway]: dao=dao_django(cls=cls) query = {'src':'db'} if cls==Drug or cls==Target else {} dao.remove(query) self.stats={'n_drugs':0, 'n_targets':0, 'n_drug_syns':0, 'n_target_syns':0, 'n_drug_pathways':0, 'n_target_pathways':0, } self.ug=uniprot2gene(kwargs['uniprot_gene_fn']) def onbegin_dc(self, mo): id=mo.group(1) self.cur_drug=Drug(id=id, src='db') # self.cur_drug.save() self.cur_obj=self.cur_drug self.cur_target=None def onattr_name(self, mo): self.attr_name=mo.group(1) def onvalue(self, mo): value=mo.group(1) if self.attr_name in self.attr_names: real_attr_name=self.attr_names[self.attr_name] setattr(self.cur_obj, real_attr_name, value) # Synonyms elif self.attr_name == 'Synonyms': if self.cur_target: syn=TargetSynonym(synonym=value, target=self.cur_target) self.cur_target.syns.append(syn) else: syn=DrugSynonym(synonym=value, drug=self.cur_drug) self.stats['n_drug_syns']+=1 self.cur_obj.drugsynonym_set.add(syn) syn.save() # Gene_Name elif self.attr_name == 'Gene_Name': self.cur_target.gene_sym=value try: self.cur_target.uniprot_id=','.join(self.ug.g2u[value]) except KeyError: pass ''' # (Drug) Pathways elif self.attr_name == 'Pathways': # drug pathway=DrugPathway(name=value, drug=self.cur_drug) pathway.save() self.stats['n_drug_pathways']+=1 # (Target) Pathway elif self.attr_name == 'Pathway': # target pathway=TargetPathway(name=value, target=self.cur_target) pathway.save() self.stats['n_target_pathways']+=1 ''' def onseq_desc(self, mo): pass # not interested def onseq(self, mo): pass # not interested def onend_dc(self, mo): self.cur_drug.save() self.stats['n_drugs']+=1 print 'drug %s saved' % self.cur_drug.id if self.cur_target: # self.cur_target.save() self.save_target() self.cur_target.drugs.add(self.cur_drug) self.stats['n_targets']+=1 def ondtnan(self, mo): dt_N=int(mo.group(1)) dt_attr_name=mo.group(2) # Is this a new target? if not self.cur_target or self.target_n != dt_N: if self.cur_target: # self.cur_target.save() # re-save, really self.save_target() self.cur_drug.save() self.cur_target.drugs.add(self.cur_drug) self.stats['n_targets']+=1 self.cur_target=Target(src='db') self.cur_target.syns=[] self.cur_obj=self.cur_target self.target_n=dt_N self.attr_name=dt_attr_name def onleave_ext_seq(self): pass ''' def save_drug(self): self.cur_drug.save() for target in self.targets: target.drugs.add(self.cur_drug) target.save() ''' def save_target(self): if not hasattr(self.cur_target, 'id'): raise Exception('target has no id: %s' % self.cur_target) # self.cur_target.save() # print '%s saved' % self.cur_target for s in self.cur_target.syns: syn=TargetSynonym(synonym=s, target=self.cur_target) self.cur_target.targetsynonym_set.add(syn) self.cur_target.save() print '%s saved' % self.cur_target
class TtdBuilderDjango(object): def __init__(self, **kwargs): self.db_name=kwargs['db'] self.cur_target=None self.cur_id=None self.targets=[] # fixme: all of this should really be in the dao_django class if 'clear_table' in kwargs and kwargs['clear_table']: print 'clearing tables...' for cls in [ Drug, DrugSynonym, DrugPathway, Target, TargetSynonym, TargetPathway]: objs=cls.objects.all() try: objs.delete() except django.db.utils.DatabaseError: print 'clearing objects the long way for %s' % cls.__name__ for o in objs: o.delete() self.stats={'n_drugs':0, 'n_targets':0, 'n_pathways':0} self.ug=uniprot2gene(kwargs['uniprot_gene_fn']) # These are called by the reader def on_line3(self, row): self._common(row) def on_line4(self, row): self._common(row) def on_line6(self, row): self._common(row) def on_eof(self): self.cur_target.save() self.stats['n_targets']+=1 return self.targets def _common(self, row): ''' do things common to line[346]: - check for new target (via id), save old target; - do the method name lookup, and call it ''' id=row[0] if id != self.cur_id: if self.cur_target: print '_common: about to save target: %s: %d drugs, %d synonyms, %d pathways' % \ (self.cur_target.id, len(self.cur_target.drugs.all()), len(self.cur_target.targetsynonym_set.all()), len(self.cur_target.targetpathway_set.all())) self.cur_target.save() self.stats['n_targets']+=1 self.cur_target=Target(id=id, src='ttd') self.cur_target.save() # to get id; will re-save later self.cur_id=id self.targets.append(self.cur_target) method_name=self.sanitize(row[1]) try: method=getattr(self, 'on_'+method_name) method(row) except AttributeError: pass def sanitize(self, method_name): return re.sub('\W', '', method_name) def on_Name(self, row): self.cur_target.name=row[2] def on_Synonyms(self, row): syn=TargetSynonym(synonym=row[2], target=self.cur_target) syn.save() self.cur_target.synonyms.add(syn) def on_Drugs(self, row): if row[5] not in Drug.approvals: # print 'not approved: %s' % '\t'.join(row) return drug=Drug(id=row[3], name=row[2], condition=row[4], approval=row[5], src='ttd') drug.save() self.stats['n_drugs']+=1 self.cur_target.drugs.add(drug) def on_Pathway(self, row): pw=TargetPathway(name=row[2], target=self.cur_target) pw.save() self.stats['n_pathways']+=1 self.cur_target.targetpathways.add(pw) def on_UniProtID(self, row): self.cur_target.uniprot_id=row[2] try: gs=self.ug.u2g[row[2]] self.cur_target.gene_sym=','.join(gs) except KeyError: print 'no genes found for uniprot=%s' % row[2]