Removing GetSites , GetSitesFRomOARParse, verify_site
[sfa.git] / sfa / senslab / OARrestapi.py
index 210da7b..221b119 100644 (file)
@@ -21,10 +21,14 @@ OARrequests_uri_list = ['/oarapi/version.json','/oarapi/timezone.json', '/oarapi
 OARrequests_get_uri_dict = { 'GET_version': '/oarapi/version.json',
                        'GET_timezone':'/oarapi/timezone.json' ,
                        'GET_jobs': '/oarapi/jobs.json',
+                        'GET_jobs_id': '/oarapi/jobs/id.json',
+                        'GET_jobs_id_resources': '/oarapi/jobs/id/resources.json',
+                        'GET_resources_id': '/oarapi/resources/.json',
                        'GET_jobs_table': '/oarapi/jobs/table.json',
                        'GET_jobs_details': '/oarapi/jobs/details.json',
                        'GET_resources_full': '/oarapi/resources/full.json',
                        'GET_resources':'/oarapi/resources.json',
+                        
 }
 
 OARrequest_post_uri_dict = { 'POST_job': '/oarapi/jobs.json'}
@@ -34,25 +38,41 @@ POSTformat = {  #'yaml': {'content':"text/yaml", 'object':yaml}
 #'http': {'content':"applicaton/x-www-form-urlencoded",'object': html},
 }
 
+OARpostdatareqfields = {'resource' :"/nodes=", 'command':"sleep", 'workdir':"/home/", 'walltime':""}
+
 class OARrestapi:
     def __init__(self):
         self.oarserver= {}
         self.oarserver['ip'] = OARIP
         self.oarserver['port'] = 80
         self.oarserver['uri'] = None
-        self.oarserver['postformat'] = None    
+        self.oarserver['postformat'] = 'json'  
             
-    def GETRequestToOARRestAPI(self, request ): 
-        self.oarserver['uri'] = OARrequests_get_uri_dict[request]
-        try :
+    def GETRequestToOARRestAPI(self, request, strval=None  ): 
+        self.oarserver['uri'] = OARrequests_get_uri_dict[request] 
+        data = json.dumps({})
+        if strval:
+          self.oarserver['uri'] = self.oarserver['uri'].replace("id",str(strval))
+          print>>sys.stderr, "\r\n \r\n   GETRequestToOARRestAPI replace :  self.oarserver['uri'] %s",  self.oarserver['uri']
+        
+        try :  
+            headers = {'X-REMOTE_IDENT':'savakian',\
+            'content-length':'0'}
+            #conn = httplib.HTTPConnection(self.oarserver['ip'],self.oarserver['port'])
+            #conn.putheader(headers)
+            #conn.endheaders()
+            #conn.putrequest("GET",self.oarserver['uri'] ) 
             conn = httplib.HTTPConnection(self.oarserver['ip'],self.oarserver['port'])
-            conn.request("GET",self.oarserver['uri'] )
+           
+            conn.request("GET",self.oarserver['uri'],data , headers )
             resp = ( conn.getresponse()).read()
             conn.close()
         except:
             raise ServerError("GET_OAR_SRVR : Could not reach OARserver")
         try:
             js = json.loads(resp)
+            if strval:
+                print>>sys.stderr, " \r\n \r\n \t GETRequestToOARRestAPI strval %s js %s" %(strval,js)
             return js
         
         except ValueError:
@@ -60,35 +80,60 @@ class OARrestapi:
 
                
                
-    def POSTRequestToOARRestAPI(self, request,format, datadict): 
-        self.oarserver['uri'] = OARrequest_post_uri_dict[request] 
-        if format in POSTformat:
-            if format is 'json':
-                data = json.dumps(datadict)
-             
-            try :
-                conn = httplib.HTTPConnection(self.oarserver['ip'],self.oarserver['port'])
-                conn.putrequest("POST",self.oarserver['uri'] )
-                self.oarserver['postformat'] = POSTformat[format]
-                conn.putheader('content-type', self.oarserver['postformat']['content'])
-                conn.putheader('content-length', str(len(data))) 
-                conn.endheaders()
-                conn.send(data)
-                resp = ( conn.getresponse()).read()
-                conn.close()
+    def POSTRequestToOARRestAPI(self, request, datadict, username):
+        #first check that all params for are OK 
+        print>>sys.stderr, " \r\n \r\n POSTRequestToOARRestAPI username",username
+        try:
+            self.oarserver['uri'] = OARrequest_post_uri_dict[request] 
+        except:
+            print>>sys.stderr, " \r\n \r\n POSTRequestToOARRestAPI request not in OARrequest_post_uri_dict"
+            return
+        #if format in POSTformat:
+            #if format is 'json':
+        data = json.dumps(datadict)
+        headers = {'X-REMOTE_IDENT':username,\
+                'content-type':POSTformat['json']['content'],\
+                'content-length':str(len(data))}     
+        try :
+            #self.oarserver['postformat'] = POSTformat[format]
+            
+            print>>sys.stderr, "\r\n POSTRequestToOARRestAPI   headers %s uri %s" %(headers,self.oarserver['uri'])
+            conn = httplib.HTTPConnection(self.oarserver['ip'],self.oarserver['port'])
+            conn.request("POST",self.oarserver['uri'],data,headers )
+            resp = ( conn.getresponse()).read()
+            conn.close()
+            
+            #conn = httplib.HTTPConnection(self.oarserver['ip'],self.oarserver['port'])
+            #conn.putrequest("POST",self.oarserver['uri'] )
+            #self.oarserver['postformat'] = POSTformat[format]
+            #conn.putheader('HTTP X-REMOTE_IDENT', 'avakian')
+            #conn.putheader('content-type', self.oarserver['postformat']['content'])
+            #conn.putheader('content-length', str(len(data))) 
+            #conn.endheaders()
+            #conn.send(data)
+            #resp = ( conn.getresponse()).read()
+            #conn.close()
 
-            except:
-                raise ServerError("POST_OAR_SRVR : error")
-                    
-            try:
-                answer = self.oarserver['postformat']['object'].loads(resp)
-                return answer
+        except:
+            print>>sys.stderr, "\r\n POSTRequestToOARRestAPI  ERROR: data %s \r\n \t\n \t\t headers %s uri %s" %(data,headers,self.oarserver['uri'])
+            #raise ServerError("POST_OAR_SRVR : error")
+                
+        try:
+            answer = json.loads(resp)
+            print>>sys.stderr, "\r\n POSTRequestToOARRestAPI : ", answer
+            return answer
+
+        except ValueError:
+            raise ServerError("Failed to parse Server Response:" + answer)
+
+
+    #def createjobrequest(self, nodelist):
+        #datadict = dict(zip(self.OARpostdatareqfields.keys(), self.OARpostdatareqfields.values())
+        #for k in datadict:
+                #if k is 'resource':
+                    #for node in nodelist:
+                    #datadict[k] += str(nodelist)
 
-            except ValueError:
-                raise ServerError("Failed to parse Server Response:" + answer)
-        else:
-            print>>sys.stderr, "\r\n POSTRequestToOARRestAPI : ERROR_POST_FORMAT"
-                       
                        
 class OARGETParser:
 
@@ -157,6 +202,9 @@ class OARGETParser:
                 
     def ParseJobsDetails (self): 
         print "ParseJobsDetails"
+        
+    def ParseJobsIdResources(self):
+        print>>sys.stderr, "ParseJobsIdResources"
             
     def ParseResources(self) :
         print>>sys.stderr, " \r\n  \t\t\t ParseResources__________________________ " 
@@ -183,7 +231,9 @@ class OARGETParser:
     #of the node properties and properties'values.
     def ParseNodes(self):  
         node_id = None
+        #print >>sys.stderr, " \r\n \r\n \t\t OARrestapi.py ParseNodes self.raw_json %s" %(self.raw_json)
         for dictline in self.raw_json:
+            #print >>sys.stderr, " \r\n \r\n \t\t OARrestapi.py ParseNodes dictline %s hey" %(dictline)
             for k in dictline.keys():
                 if k in self.resources_fulljson_dict:
                     # dictionary is empty and/or a new node has to be inserted 
@@ -237,8 +287,8 @@ class OARGETParser:
         #print>>sys.stderr, " \r\n =========GetNodesFromOARParse: node_dictlist %s "%(self.node_dictlist)
         return self.node_dictlist
 
-    def GetSitesFromOARParse(self):
-        return self.site_dict
+    #def GetSitesFromOARParse(self):
+        #return self.site_dict
     
     def GetJobsFromOARParse(self):
         return self.jobs_list  
@@ -247,6 +297,8 @@ class OARGETParser:
         'GET_version': {'uri':'/oarapi/version.json', 'parse_func': ParseVersion},
         'GET_timezone':{'uri':'/oarapi/timezone.json' ,'parse_func': ParseTimezone },
         'GET_jobs': {'uri':'/oarapi/jobs.json','parse_func': ParseJobs},
+        'GET_jobs_id': {'uri':'/oarapi/jobs/id/resources.json','parse_func': ParseJobsIdResources},
+        'GET_jobs_id_resources': {'uri':'/oarapi/jobs/id/resources.json','parse_func': ParseJobsIdResources},
         'GET_jobs_table': {'uri':'/oarapi/jobs/table.json','parse_func': ParseJobsTable},
         'GET_jobs_details': {'uri':'/oarapi/jobs/details.json','parse_func': ParseJobsDetails},
         'GET_resources_full': {'uri':'/oarapi/resources/full.json','parse_func': ParseResourcesFull},
@@ -275,9 +327,9 @@ class OARGETParser:
         self.site_dict = {}
         self.SendRequest("GET_version")
 
-    def SendRequest(self,request):
+    def SendRequest(self,request, strval = None ):
         if request in OARrequests_get_uri_dict:
-            self.raw_json = self.server.GETRequestToOARRestAPI(request)
+            self.raw_json = self.server.GETRequestToOARRestAPI(request,strval)
             self.OARrequests_uri_dict[request]['parse_func'](self)
         else:
             print>>sys.stderr, "\r\n OARGetParse __init__ : ERROR_REQUEST "    ,request
@@ -290,30 +342,7 @@ class OARapi:
 
        #GetNodes moved to slabdriver.py
             
-    def GetSites(self, site_filter= None, return_fields=None):
-        print>>sys.stderr, " \r\n GetSites+++++++++++++++++" 
-        self.parser.SendRequest("GET_resources_full")  
-        site_dict = self.parser.GetSitesFromOARParse()
-        return_site_list = []
-        site = site_dict.values()[0]
-        Users = SenslabImportUsers()
-                
-        #print>>sys.stderr, " \r\n  GetSites sites_dict %s site_filter %s  \r\n \r\n  \r\n \r\n------site %s" %(site_dict,site_filter,site ) 
-        admins_dict ={'person_ids': Users.GetPIs(site['site_id'])}
-        site.update(admins_dict)       
-        
-        slice_list = Users.GetSlices()
-        for sl in slice_list:
-                #print>>sys.stderr, " \r\n  GetSites sl %s" %(sl)
-                if sl['site_id'] == site['site_id']:
-                        site['slice_ids'].append(sl['slice_id'])
-        
-        if not (site_filter or return_fields):
-                return_site_list = site_dict.values()
-                return return_site_list
-        
-        return_site_list = parse_filter(site_dict.values(),site_filter ,'site', return_fields)
-        return return_site_list
+
     
                     
     def GetJobs(self):