split api and driver
[sfa.git] / sfa / methods / remove_peer_object.py
index ab55ed8..465ed05 100644 (file)
@@ -1,17 +1,12 @@
-from sfa.util.faults import *
+from sfa.util.faults import UnknownSfaType, SfaInvalidArgument
 from sfa.util.method import Method
 from sfa.util.parameter import Parameter, Mixed
-from sfa.trust.auth import Auth
-from sfa.util.record import GeniRecord
-from sfa.util.genitable import GeniTable
-from sfa.util.debug import log
+from sfa.util.table import SfaTable
 from sfa.trust.credential import Credential
-from sfa.util.misc import *
-from types import StringTypes
 
 class remove_peer_object(Method):
     """
-    Remove an peer object from the PLC records of a local aggregate. 
+    Remove a peer object from the PLC records of a local aggregate. 
     This method will be called by registry.remove() while removing 
     a record from the local aggreage's PLCDB and sfa table. This 
     method need not be directly called by end-user.
@@ -27,77 +22,76 @@ class remove_peer_object(Method):
     accepts = [
         Parameter(str, "Credential string"),
         Parameter(dict, "Record dictionary"),
-        Mixed(Parameter(str, "Request hash"),
-              Parameter(None, "Request hash not specified"))
+        Mixed(Parameter(str, "Human readable name of the original caller"),
+              Parameter(None, "Origin hrn not specified"))
         ]
 
     returns = Parameter(int, "1 if successful")
     
-    def call(self, cred, record, request_hash=None):
+    def call(self, cred, record, origin_hrn=None):
         user_cred = Credential(string=cred)
 
         #log the call
-        gid_origin_caller = user_cred.get_gid_origin_caller()
-        origin_hrn = gid_origin_caller.get_hrn()
-        self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name))
+        if not origin_hrn:
+            origin_hrn = user_cred.get_gid_caller().get_hrn()
+        self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, record['hrn'], self.name))
 
-        self.api.auth.authenticateCred(cred, [cred], request_hash) 
         self.api.auth.check(cred, "remove")
 
         # Only allow the local interface or record owner to delete peer_records 
         try: self.api.auth.verify_object_permission(record['hrn'])
         except: self.api.auth.verify_cred_is_me(cred)
         
-        table = GeniTable()
+        table = SfaTable()
         hrn, type = record['hrn'], record['type']
         records = table.find({'hrn': hrn, 'type': type })
         for record in records:
-         if record['peer_authority']:
-            self.remove_plc_record(record)
-            table.remove(record)
+            if record['peer_authority']:
+                self.remove_plc_record(record)
+                table.remove(record)
             
         return 1
 
     def remove_plc_record(self, record):
         type = record['type']        
         if type == "user":
-            persons = self.api.plshell.GetPersons(self.api.plauth, {'person_id' : record['pointer']})
+            persons = self.api.driver.GetPersons({'person_id' : record['pointer']})
             if not persons:
                 return 1
             person = persons[0]
             if person['peer_id']:
                 peer = self.get_peer_name(person['peer_id']) 
-                self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'person', person['person_id'], peer)
-            self.api.plshell.DeletePerson(self.api.plauth, person['person_id'])
+                self.api.driver.UnBindObjectFromPeer('person', person['person_id'], peer)
+            self.api.driver.DeletePerson(person['person_id'])
            
         elif type == "slice":
-            slices=self.api.plshell.GetSlices(self.api.plauth, {'slice_id' : record['pointer']})
+            slices=self.api.driver.GetSlices({'slice_id' : record['pointer']})
             if not slices:
                 return 1
             slice=slices[0]
             if slice['peer_id']:
                 peer = self.get_peer_name(slice['peer_id']) 
-                self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'slice', slice['slice_id'], peer)
-            self.api.plshell.DeleteSlice(self.api.plauth, slice['slice_id'])
+                self.api.driver.UnBindObjectFromPeer('slice', slice['slice_id'], peer)
+            self.api.driver.DeleteSlice(slice['slice_id'])
         elif type == "authority":
-            sites=self.api.plshell.GetSites(self.api.plauth, {'site_id' : record['pointer']})
+            sites=self.api.driver.GetSites({'site_id' : record['pointer']})
             if not sites:
                 return 1
             site=sites[0]
             if site['peer_id']:
                 peer = self.get_peer_name(site['peer_id']) 
-                self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'site', site['site_id'], peer)
-            self.api.plshell.DeleteSite(self.api.plauth, site['site_id'])
+                self.api.driver.UnBindObjectFromPeer('site', site['site_id'], peer)
+            self.api.driver.DeleteSite(site['site_id'])
            
         else:
-            raise UnknownGeniType(type)
+            raise UnknownSfaType(type)
 
         return 1
 
     def get_peer_name(self, peer_id):
-        peers = self.api.plshell.GetPeers(self.api.plauth, [peer_id], ['peername', 'shortname', 'hrn_root'])
+        peers = self.api.driver.GetPeers([peer_id], ['peername', 'shortname', 'hrn_root'])
         if not peers:
-            raise GeniInvalidArgument, "No such peer"
+            raise SfaInvalidArgument, "No such peer"
         peer = peers[0]
         return peer['shortname']