Changeset 88

Show
Ignore:
Timestamp:
01/27/08 23:49:45 (4 years ago)
Author:
phil
Message:

now have delete of attribute working and doing a cascade delete on "newly unreferenced" bnodes

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • rdfalchemy/trunk/rdfalchemy/rdfalchemy.py

    r87 r88  
    120120        else: 
    121121            return rdfObject 
     122             
     123    def __delete__(self, obj): 
     124        # if this is a bnode like a list or a container a lot more should  
     125        # be done ala getList above 
     126        log.debug("DELETE with descriptor for %s on %s"%(self.pred, obj.resUri))         
     127        # first drop the cached value 
     128        del obj.__dict__[self.name] 
     129        # next, drop the triples          
     130        for s,p,o in obj.db.triples((obj.resUri, self.pred, None)): 
     131            obj.db.remove((s,p,o)) 
     132            #finally if the object in the triple was a bnode  
     133            #cascade delete the thing it referenced 
     134            if isinstance(o,BNode): 
     135                rdfObject(o).remove(db=obj.db,cascade='bnode') 
     136 
     137 
     138 
    122139                     
    123140class rdflibSingle(rdflibAbstract): 
     
    159176        #return None 
    160177     
    161     def __delete__(self, obj): 
    162         # if this is a bnode like a list or a container a lot more should  
    163         # be done ala getList above 
    164         log.debug("DELETE with descriptor for %s on %s"%(self.pred, obj.resUri))         
    165         return obj.db.remove((obj.resUri,self.pred, None)) 
    166  
    167178    
    168179class rdflibMultiple(rdflibAbstract): 
     
    188199            log.debug("Geting %s for %s"%(self.pred,obj.resUri)) 
    189200        return val 
     201         
     202 
     203 
    190204 
    191205class rdflibList(rdflibMultiple): 
     
    438452        for s,p,o in db.triples((None,None,self.resUri)): 
    439453            db.set((s, p, name)) 
    440          
    441          
    442          
     454        self.resUri = name 
    443455         
    444456