Пример #1
0
    def delete(self, *args, **kw):
        user = handler.user.get_user_in_session(request)
        project = DBSession.query(Projects).filter(Projects.id == args[0]).first()
        admin = isAdmin(user)

        if project.user_id == user.id or admin:
            try:
                flash("Your project " + str(project.project_name) + " has been deleted with success")
            except:
                flash("Your project " + (project.project_name) + " has been deleted with success")
            DBSession.delete(project)
            DBSession.flush()
            raise redirect('/projects')
        else:
            flash("It is not your project -> you are not allowed to delete it", 'error')
            raise redirect('/projects')
Пример #2
0
    def edit(self, *args, **kw):

        user = handler.user.get_user_in_session(request)
        sample = DBSession.query(Samples).filter(Samples.id == args[0]).first()
        admin = isAdmin(user)
        user_lab = session.get("current_lab", None)
        if user_lab:
            lab = DBSession.query(Labs).filter(Labs.name == user_lab).first()

        if admin:
            projects = DBSession.query(Projects).all()
            measurements = DBSession.query(Measurements).all()
        else:
            projects = DBSession.query(Projects).filter(Projects.user_id == user.id).all()
            for p in projects:
                if p not in lab.projects:
                    projects.remove(p)
            attributs = DBSession.query(Attributs).filter(and_(Attributs.lab_id == lab.id, Attributs.deprecated == False)).all()
            measurements = []
            for a in attributs:
                for m in a.measurements:
                    if m not in measurements and m.user_id == user.id:
                        measurements.append(m)

        if sample.get_userid == user.id or admin:

            edit_form = build_form("edit", "sample", sample.id)(action=url('/samples/post_edit'))
            edit_form.child.children[0].value = sample.id
            projects_list = [(p.id, '%s' % p.project_name) for p in projects]
            edit_form.child.children[1].options = projects_list
            id_project = DBSession.query(Projects.id).filter(Projects.id == sample.project_id).first()
            #measurement(s) attached to the sample
            list_unselected = [m for m in measurements if m not in sample.measurements]
            meas_selected = [(meas.id, '%s' % (meas.name)) for meas in list_unselected] + [(meas.id, '%s' % (meas.name), {'selected': True}) for meas in sample.measurements]
            edit_form.child.children[1].value = id_project[0]
            edit_form.child.children[2].value = sample.name
            edit_form.child.children[3].options = get_list_types(user_lab)
            edit_form.child.children[3].value = sample.type
            edit_form.child.children[4].value = sample.protocole
            edit_form.child.children[5].options = meas_selected

            return dict(page='samples', widget=edit_form.req(), value=kw)
        else:
            flash("It is not your sample -> you are not allowed to edit this sample", 'error')
            raise redirect('/samples')
Пример #3
0
    def delete(self, *args, **kw):
        user = handler.user.get_user_in_session(request)
        sample = DBSession.query(Samples).filter(Samples.id == args[0]).first()
        admin = isAdmin(user)

        if sample.get_userid == user.id or admin:
            try:
                flash("Your sample " + str(sample.name) + " has been deleted with success")
            except:
                flash("Your sample " + (sample.name) + " has been deleted with success")
            DBSession.delete(sample)
            DBSession.flush()
            raise redirect("/samples")
        #TO CHECK : check if sample get already an user as owner
        elif sample.get_userid == None or admin:
            DBSession.delete(sample)
            DBSession.flush()
            flash("Your sample has been deleted")
            raise redirect("/samples")
        else:
            flash("It is not your sample -> you are not allowed to delete it", 'error')
            raise redirect('/samples')
Пример #4
0
    def edit(self, *args, **kw):

        user = handler.user.get_user_in_session(request)
        user_lab = session.get("current_lab", None)
        if user_lab is not None:
            lab = DBSession.query(Labs).filter(Labs.name == user_lab).first()
        admin = isAdmin(user)
        project = DBSession.query(Projects).filter(Projects.id == args[0]).first()
        samples = []
        if admin:
            samples = DBSession.query(Samples).all()
        else:
            attributs = DBSession.query(Attributs).filter(and_(Attributs.lab_id == lab.id, Attributs.deprecated == False)).all()
            projects = [p.id for p in user.projects if p in lab.projects]
            for a in attributs:
                for s in a.samples:
                    if s not in samples and s.project_id in projects:
                        samples.append(s)

        if project.user_id == user.id or admin:
            edit_form = EditProject(action=url('/projects/post_edit'))
            edit_form.child.children[0].value = project.id
            edit_form.child.children[1].value = project.project_name
            edit_form.child.children[2].value = project.description
            list_unselected = [s for s in samples if s not in project.samples]
            samples_selected = [(sample.id, '%s' % (sample.name)) for sample in list_unselected] + [(sample.id, '%s' % (sample.name), {'selected': True}) for sample in project.samples]
            edit_form.child.children[3].options = samples_selected

            list_selected = []
            for x in samples_selected:
                #take only those with "selected : True"
                if len(x) > 2:
                    list_selected.append(x[0])
            edit_form.child.children[4].value = list_selected

            return dict(page='projects', widget=edit_form, value=kw)
        else:
            flash("It is not your project -> you are not allowed to edit it", 'error')
            raise redirect('/projects')
Пример #5
0
    def create(self, *args, **kw):
        user = handler.user.get_user_in_session(request)
        project = Projects()
        name = kw.get('project_name', None)
        if name is None:
            return {'ERROR': "You have to give a name to your project"}
        project.project_name = name
        lab_id = kw['lab']
        if lab_id is None:
            return {'ERROR': "We need to know the user's lab"}
        lab = DBSession.query(Labs).filter(Labs.id == lab_id).first()
        (project.labs).append(lab)
        #test if user is an admin
        admin = isAdmin(user)
        if admin:
            project.user_id = kw.get('user_id', user.id)
        else:
            project.user_id = user.id

        project.description = kw.get('description', None)
        get_samples = kw.get('samples', None)
        l = []

        if get_samples is None:
            project.samples = l
        else:
            for x in get_samples.split(','):
                sam = DBSession.query(Samples).join(Projects).join(User).filter(Samples.id == x).first()
                l.append(sam)

            project.samples = l
        #checking print
        print project, " building project with wget"

        DBSession.add(project)
        DBSession.flush()

        return {"user_id": user.id, "user_name": user.name, "project_id": project.id, "project_name": project.project_name,
                 "description": project.description}
Пример #6
0
 def profile(self, *args, **kw):
     '''
     Get information about logged user
     '''
     user = handler.user.get_user_in_session(request)
     user_lab = session.get("current_lab", None)
     u_id = kw.get("u_id", None)
     u_lab = kw.get("lab", None)
     #admin choice
     if isAdmin(user):
         if u_id is None or u_lab is None:
             pass
         else:
             user = DBSession.query(User).filter(User.id == u_id).first()
             if user is None:
                 flash("Wrong user id : " + u_id , "error")
                 raise redirect(url('./'))
             user_lab = u_lab
     elif not isAdmin(user) and u_id is not None or u_lab is not None:
         flash("I'm watching you... Do not try to use admin's method if you're not one of them." , "error")
     #normal user
     user_id = user.id
     name = user.name
     firstname = user.firstname
     lab = DBSession.query(Labs).filter(Labs.name == user_lab).first()
     if lab is None:
         flash("Lab unknown : " + user_lab , "error")
         raise redirect(url('./'))
     elif lab not in user.labs:
         flash("User " + name + " do not belong to this lab : " + user_lab , "error")
         raise redirect(url('./'))
     key = user.key
     #save general information
     profile_info = {"Name": name, "Firstname": firstname, "Your key": key, "Lab": user_lab}
     #requests to get more information
     meas = DBSession.query(Measurements).join(Measurements.attributs)\
     .filter(and_(Attributs.lab_id == lab.id, Attributs.deprecated == False))\
     .filter(Measurements.user_id == user_id).all()
     meas_lab = DBSession.query(Measurements).join(Measurements.attributs)\
     .filter(and_(Attributs.lab_id == lab.id, Attributs.deprecated == False)).all()
     if meas is None:
         len_meas = 0
     else:
         len_meas = len(meas)
     profile_info["Number of my measurements created"] = len_meas
     #get each files
     total_size_perso = 0
     total_size_lab = 0
     for m in meas:
         if len(m.fus) > 0:
             for fu in m.fus:
                 sha1 = fu.sha1
                 semi_path = fu.path
                 path_fu = semi_path + "/" + sha1
                 if path_fu.startswith(HTS_path_archive()):
                     path_fu = path_fu + ".tar.gz"
                 try:
                     file_size = os.path.getsize(path_fu)
                 except:
                     print ">>>>> PATH ERROR DETECTED : " + path_fu
                     file_size = 0
                 total_size_perso = total_size_perso + file_size
     for measu in meas_lab:
         if len(measu.fus) > 0:
             for fu in measu.fus:
                 sha1 = fu.sha1
                 semi_path = fu.path
                 path_fu = semi_path + "/" + sha1
                 if path_fu.startswith(HTS_path_archive()):
                     path_fu = path_fu + ".tar.gz"
                 try:
                     file_size = os.path.getsize(path_fu)
                 except:
                     print ">>>>> PATH ERROR DETECTED : " + path_fu
                     file_size = 0
                 total_size_lab = total_size_lab + file_size
     if total_size_lab != 0:
         percentage_util = float("{0:.2f}".format((float(total_size_perso) / float(total_size_lab)) * 100))
     else:
         percentage_util = 0
     profile_info["My lab in BioRepo"] = display_file_size(total_size_lab)
     profile_info["My data in BioRepo"] = display_file_size(total_size_perso) + " (" + str(percentage_util) + " % of my lab's data)"
     return dict(
         page='profile',
         dico=profile_info,
         value=kw
         )