def index(self):
        c.silo_name = ''
        c.ident = ''
        c.id =""
        c.q=""
        c.typ=""
        c.path =""
        c.user_logged_in_name=""
        c.src = ag.root
        c.host = ag.host
        c.message=""
        user_name = 'admin'
        password = '******'
        datastore = HTTPRequest(endpointhost=c.host)
        datastore.setRequestUserPass(endpointuser=user_name, endpointpass=password)

        (resp, respdata) = datastore.doHTTP_GET(resource="/silos", expect_type="application/JSON")
        c.sources =  json.loads(respdata)
        print c.sources
        
        c.source_infos = {}
        for source in c.sources:
            (resp, respdata) = datastore.doHTTP_GET(resource='/' + source + '/states', expect_type="application/JSON")
            state_info =  json.loads(respdata)
            c.source_infos[source] = [source, len(state_info['datasets'])]
        ##print "sourceinfos:"
        ##print c.source_infos
        
        c.unregistered_sources = []
        
        
        try:
            s_q= meta.Session.query(SourceInfo.silo).filter(SourceInfo.activate == False)
            for source in s_q:
                c.unregistered_sources.append(source.silo)
            print "Unregistered sources"
            print c.unregistered_sources
        except IntegrityError:
            meta.Session.rollback()
            return False
        return render('/list_of_sources.html')
Пример #2
0
def sourceinfo(request, source):
        # A user needs to be authenticated and authorized  to be able to administer the DataFinder                          
        # Test if the user is now a university authenticated user
        if 'DF_USER_SSO_ID' not in request.session:                          
            return redirect("/login?redirectPath=admin")
            # Test if the user is Data Finder authorised user
        if  request.session['DF_USER_ROLE'] != "admin" :
            return redirect("/")
        
        context = { 
        #'DF_VERSION':settings.DF_VERSION,
        #'STATIC_URL': settings.STATIC_URL,
        'silo_name':"",
        'ident' : "",
        'id':"",
        'path' :"",
        'q':"",
        'src':settings.get("main:granary.uri_root"),
        'host':settings.get("main:granary.host"),
        'typ':"",
        'message':"",
        'silo':"",
        'source_infos':{},
        'header':"",
        'activate':"",
        'unregistered_sources':[],
        'kw':{},
        'sourceinfo':SourceInfo(),
        'roles':[],
        'source':""
        }    
    
#        if not request.environ.get('repoze.who.identity'):
#            abort(401, "Not Authorised")
#        if not ag.granary.issilo(silo):
#            abort(404)
#        ident = request.environ.get('repoze.who.identity')
#        c.ident = ident
#        c.silo = silo
#        silos = ag.authz(ident, permission=['administrator', 'manager'])
#        if not silo in silos:
#            abort(403, "Do not have administrator or manager credentials for silo %s"%silo)
#        user_groups = list_user_groups(ident['user'].user_name)
#        if ('*', 'administrator') in user_groups:
#            #User is super user
#            c.roles = ["admin", "manager", "user"]
#        elif (silo, 'administrator') in user_groups:
#            c.roles = ["admin", "manager", "user"]
#        elif (silo, 'manager') in user_groups:
#            c.roles = ["manager", "user"]
#        else:
#            abort(403, "Do not have administrator or manager credentials for silo %s"%silo)
        http_method = request.environ['REQUEST_METHOD']
        ## hardcoded for now
        context['roles'] = ["admin", "manager", "user"]
        ##c.kw = ag.granary.describe_silo(source)
        user_name = 'admin'
        password = '******'
        datastore = HTTPRequest(endpointhost=context['host'])
        datastore.setRequestUserPass(endpointuser=user_name, endpointpass=password)
        context['source'] = source
        state_info = None     

#        try:
#            c.kw = {    'silo':src.silo, 
#                        'title':src.title,                       
#                        'description':src.description,
#                        'notes':src.notes,
#                        'users':src.users,
#                        'disk_allocation':src.disk_allocation,
#                        'activate':src.activate
#                    }    
#            s_q= meta.Session.query(SourceInfo).filter(SourceInfo.silo == c.source).filter(SourceInfo.activate == False)  
#            s_q.one()
#            return render("/admin_sourceview.html") 
#        except orm.exc.NoResultFound:
#            sourceinfo.activate =  False
#            meta.Session.add(sourceinfo)
#            meta.Session.commit()
#            pass      
#        except IntegrityError:
#            meta.Session.rollback()
#            return False     
            
            ## If the source is not activated only then get the source information from the registered information area
        (resp, respdata) = datastore.doHTTP_GET(resource='/' + source + '/states', expect_type="application/JSON")
        state_info =  json.loads(respdata)
        ##print json.loads(respdata)
        context['kw']=state_info
        
        print "http_method = "
        print http_method
        if http_method == "GET":
            return render_to_response('admin_sourceinfo.html', context, context_instance=RequestContext(request))
        elif http_method == "POST":
            ##silo = request.REQUEST.get('silo', None)
            title = request.REQUEST.get('title', '')
            description = request.REQUEST.get('description', '')
            notes = request.REQUEST.get('notes', '')
            administrators = request.REQUEST.get('administrators', '')
            managers = request.REQUEST.get('managers', '')
            users = request.REQUEST.get('users', '')
            disk_allocation = request.REQUEST.get('disk_allocation', 0)
            fields = \
                [ ("silo", source),
                  ("title", title),
                  ("description", description),
                  ("notes", notes),
                  ("administrators", administrators),
                  ("managers", managers),
                  ("users", users),
                  ("disk_allocation", disk_allocation)
                ]
            print fields
            files =[]
            (reqtype, reqdata) = SparqlQueryTestCase.encode_multipart_formdata(fields, files)
            (resp,respdata) = datastore.doHTTP_POST(reqdata, reqtype, resource='/' + source + "/admin", expect_type="application/JSON")
            resource ='/' + source + "/admin"
            print 'respdata', respdata
            print 'msg', resp.msg
            print 'reason', resp.reason
            print 'status',resp.status
            print resp.read()
##            print "response data for update metadata"
            if  resp.status== 204  :
                context['source'] = source
                context['message'] = "Metadata updated"
                (resp, respdata) = datastore.doHTTP_GET(resource='/' + source + '/states', expect_type="application/JSON")
                state_info =  json.loads(respdata)       
                context['kw']=state_info
                print "before reloading"
                print state_info
                return render_to_response('admin_sourceinfo.html', context, context_instance=RequestContext(request))
            else:
                context['source'] = source
                context['message'] = "Metadata not updated: " + str(resp.status)
                print "metadata not updated: " + str(resp.status)
                #abort(resp.status, respdata )
                return render_to_response('admin_sourceinfo.html', context, context_instance=RequestContext(request))

                
        elif http_method == "DELETE":
            ##fields = [("silo", source)]
            ##print fields
            ##files =[]
            ##(reqtype, reqdata) = SparqlQueryTestCase.encode_multipart_formdata(fields, files)
            ##(resp,respdata) = datastore.doHTTP_DELETE(reqdata, reqtype, resource='/' + source + "/admin", expect_type="application/JSON")
          
            (resp,respdata) = datastore.doHTTP_DELETE(resource='/' + source + "/admin")
            resource ='/' + source + "/admin"
            print resp.read()
 
            print "Response Status = "
            print resp.status 

            if  resp.status== 200:
                #Modify the source entry in the sqllite database in the data finder. Change activate = False.
                try:
                    s_q = SourceInfo.objects.filter(silo = source)                                        
                    for src in s_q:
                        src.activate = False
                        src.save()
                        print "after save"
                    context['message'] = "Metadata deleted"
                except Exception, e:
                    print "Exception" +  str(e)
                    context['message'] = str(e)
            else:
                context['message'] = "Metadata could not be deleted"
                abort(resp.status, respdata )
            
            return render_to_response('list_of_sources.html', context, context_instance=RequestContext(request))
Пример #3
0
    def sourceinfo(self, source):
        c.silo_name = ''
        c.ident = ''
        c.id =""
        c.path =""
        c.user_logged_in_name=""
        c.q=""
        c.typ=""
        c.src = ag.root
#        if not request.environ.get('repoze.who.identity'):
#            abort(401, "Not Authorised")
#        if not ag.granary.issilo(silo):
#            abort(404)
#        ident = request.environ.get('repoze.who.identity')
#        c.ident = ident
#        c.silo = silo
#        silos = ag.authz(ident, permission=['administrator', 'manager'])
#        if not silo in silos:
#            abort(403, "Do not have administrator or manager credentials for silo %s"%silo)
#        user_groups = list_user_groups(ident['user'].user_name)
#        if ('*', 'administrator') in user_groups:
#            #User is super user
#            c.roles = ["admin", "manager", "user"]
#        elif (silo, 'administrator') in user_groups:
#            c.roles = ["admin", "manager", "user"]
#        elif (silo, 'manager') in user_groups:
#            c.roles = ["manager", "user"]
#        else:
#            abort(403, "Do not have administrator or manager credentials for silo %s"%silo)
        http_method = request.environ['REQUEST_METHOD']
        ## hardcoded for now
        c.roles = ["admin", "manager", "user"]
        ##c.kw = ag.granary.describe_silo(source)
        c.host = ag.host
        c.silo=""
        
        
        user_name = 'admin'
        password = '******'
        datastore = HTTPRequest(endpointhost=c.host)
        datastore.setRequestUserPass(endpointuser=user_name, endpointpass=password)
        c.source = source
        c.message =""
        state_info = None     
        print "source requested: "
        print c.source 
        c.kw={}
#        try:
#            c.kw = {    'silo':src.silo, 
#                        'title':src.title,                       
#                        'description':src.description,
#                        'notes':src.notes,
#                        'users':src.users,
#                        'disk_allocation':src.disk_allocation,
#                        'activate':src.activate
#                    }    
#            s_q= meta.Session.query(SourceInfo).filter(SourceInfo.silo == c.source).filter(SourceInfo.activate == False)  
#            s_q.one()
#            return render("/admin_sourceview.html") 
#        except orm.exc.NoResultFound:
#            sourceinfo.activate =  False
#            meta.Session.add(sourceinfo)
#            meta.Session.commit()
#            pass      
#        except IntegrityError:
#            meta.Session.rollback()
#            return False     
            
            ## If the source is not activated only then get the source information from the registered information area
        (resp, respdata) = datastore.doHTTP_GET(resource='/' + c.source + '/states', expect_type="application/JSON")
        state_info =  json.loads(respdata)       
        ##print json.loads(respdata)
        c.kw=state_info
        
        print "http_method = "
        print http_method
        if http_method == "GET":
            return render("/admin_sourceinfo.html")
        elif http_method == "POST":
            ##silo = request.params.get('silo', None)
            title = request.params.get('title', '')
            description = request.params.get('description', '')
            notes = request.params.get('notes', '')
            administrators = request.params.get('administrators', '')
            managers = request.params.get('managers', '')
            users = request.params.get('users', '')
            disk_allocation = request.params.get('disk_allocation', '')
            fields = \
                [ ("silo", source),
                  ("title", title),
                  ("description", description),
                  ("notes", notes),
                  ("administrators", administrators),
                  ("managers", managers),
                  ("users", users),
                  ("disk_allocation", disk_allocation)
                ]
            print fields
            files =[]
            (reqtype, reqdata) = SparqlQueryTestCase.encode_multipart_formdata(fields, files)
            (resp,respdata) = datastore.doHTTP_POST(reqdata, reqtype, resource='/' + source + "/admin", expect_type="application/JSON")
            resource ='/' + source + "/admin"
            print 'respdata', respdata
            print 'msg', resp.msg
            print 'reason', resp.reason
            print 'status',resp.status
            print resp.read()
##            print "response data for update metadata"
            if  resp.status== 204:
                c.message = "Metadata updated"
                return render("/admin_sourceinfo.html")
            else:
                abort(resp.status, respdata )
                
        elif http_method == "DELETE":
            ##fields = [("silo", source)]
            ##print fields
            ##files =[]
            (reqtype, reqdata) = SparqlQueryTestCase.encode_multipart_formdata(fields, files)
            ##(resp,respdata) = datastore.doHTTP_DELETE(reqdata, reqtype, resource='/' + source + "/admin", expect_type="application/JSON")
          
            (resp,respdata) = datastore.doHTTP_DELETE(resource='/' + source + "/admin")
            resource ='/' + source + "/admin"
            print resp.read()
 
            print "Response Status = "
            print resp.status 

            if  resp.status== 200:
                #Modify the source entry in the sqllite database in the data finder. Change activate = False.
                try:
                    s_q= meta.Session.query(SourceInfo).filter(SourceInfo.silo == source)
                    s_q.one()
                    s_q.update({
                                   'title':title,
                                   'description':description,
                                   'notes':notes,
                                   'administrators':administrators,
                                   'managers':managers,
                                   'users':users,
                                   'disk_allocation':disk_allocation,
                                   'activate':False
                                })     
                    meta.Session.commit()
                except orm.exc.NoResultFound:
                    sourceinfo.activate =  False
                    meta.Session.add(sourceinfo)
                    meta.Session.commit()
                    pass
                except IntegrityError:
                    #log.error('Error adding user %s'%user_details['username'])
                    #print traceback.format_exc()
                    meta.Session.rollback()
                    return False
                c.message = "Metadata deleted"
                return True 
            else:
                print "Failure"
                abort(resp.status, respdata )