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')
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')
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')
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')
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}
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 )