def projects(): if 'session_id' not in session: return redirect(url_for('auth.auth')) projects = Project.get_users_projects() invitations = Project.get_users_invitations() return render_template('projects.html', projects=projects, invitations=invitations)
def getActiveProjects() -> list: """Get active projects """ cursor = connection.cursor() cursor.execute(SQLQueries.ACTIVE_PROJECT_GET) queryResult = cursor.fetchall() if (len(queryResult) == 0): return None projectList = [] for project in queryResult: projectData = Project() projectData.projectId = project[0] projectData.projectName = project[1] projectList.append(projectData) return projectList
def getStudentProject(self, StudentID): return [ Project(tuple) for tuple in self._db.execute("""select * from Project where ProjectID = (select ProjectID from Student where StudentID = {id});""". format(id=StudentID)).fetchall() ][0]
def removeUserFromProject(token, userId, projectId): """ <span class="card-title">>This Call will remove a user from a project</span> <br> <b>Route Parameters</b><br> - seToken: 'seToken'<br> - userId: 0987654321,<br> - 'projectId': 1234567890<br> <br> <br> <b>Payload</b><br> - NONE {<br> }<br> <br> <b>Response</b> <br> 200 - User updated <br> 400 - Bad Request """ requestingUser = get_user_by_token(token) if requestingUser is None: return bad_request("Bad User Token") try: userToRemove = User.get_by_id(int(userId)) except Exception as e: return bad_request("Bad id format") if userToRemove is None: return bad_request("No such user to remove") #check project Exists project = Project.get_by_id(int(projectId)) if project is None: return bad_request("No such Project!") #check if user is owner of project if requestingUser.key().id() != project.master_id: # check if user want to delete itself if requestingUser.key().id() != userToRemove.key().id(): return forbidden("No permission to delete user") try: userToRemove.projects_id_list.remove(projectId) project.membersId.remove(userToRemove.key().id()) except Exception as e: return bad_request("user is not listed to this project") db.put(userToRemove) db.put(project) db.save return Response(response=userToRemove.to_JSON(), status=200, mimetype="application/json") # Real response!
def get_stats(user): from models.Project import Project from models.Message import Message labels = ["Commits", "Open Issues Assigned", "Messages", "Unfinished Tasks"] data = [0, 0, 0, 0] for pid in user.projects_id_list: project = Project.get_by_id(int(pid)) info = json.loads(project.info) stats = info["stats"]["micro"] p_data = stats["data"] p_series = stats["series"] try: user_index = p_series.index(user.username) # adding commits data[0] = data[0] + p_data[user_index][0] # adding open issues data[1] = data[1] + p_data[user_index][1] except Exception: pass messages = Message.all().filter("master_id =", user.key().id()) for m in messages.run(): data[2] = data[2] + 1 # need to do tasks #### data = [data] return {"data": data, "labels": labels}
def projects_leave(): if request.method == 'POST': if 'session_id' not in session: return redirect(url_for('auth.auth')) json_body = {"ProjectId": request.form['action']} response = Project.leave_project(json_body) flash(response['Message']) return redirect(url_for('projects.projects'))
def create_project(): userInfo = session.get('userProfile') name = request.form.get('name', '') desc = request.form.get('desc', '') start_date = DATE new_id = db.session.query(func.max(Project.p_id)).one() print(new_id) if new_id[0] == None: new_id[0] = 0 project = Project(new_id[0] + 1, name, desc, start_date, 'N/A') try: project.insert() except: print(sys.exc_info()) abort(500) return redirect(url_for('get_all_projects'))
def getDefaultProjects() -> list: """Creates default projects as defined in the configuration with default task "-". Returns: list -- List of Projects """ projectList = [] for projectName in DEFAULT_PROJECT: project = Project() project.projectName = projectName taskList = [] task = Task() task.taskName = "-" taskList.append(task) project.taskList = taskList projectList.append(project) return projectList
def get(self, username): """display profile of user with username, if None, display logged in user """ mode = self.request.get('mode') upload_url = "" if mode == 'add_project': template = 'profile/add_project.html' upload_url = blobstore.create_upload_url( '/' + username, max_bytes_per_blob=self.MAX_IMG_SIZE) elif mode == 'edit_project': template = 'profile/edit_project.html' upload_url = blobstore.create_upload_url( '/' + username, max_bytes_per_blob=self.MAX_IMG_SIZE) elif mode == 'edit': template = 'profile/edit.html' else: template = 'profile/profile.html' user = User.get_user(username) if not user: user = User.save(username, '{}@someplace.com'.format(username), 'some long password') gravatar = user.avatar_url friends = [] if user: all, ic, cc = self.organize_courses_for(user) if user.dob: dob = user.dob.strftime('%m/%d/%Y') else: dob = None projects = Project.get_projects_by_ids(user.projects) context = { 'user': user, 'dob': dob, 'username': username, 'gravatar': gravatar, 'friends': friends, 'friend_btn': False, 'courses_all': Course.courses_to_dict(), 'courses_completed': cc, 'courses_incomplete': ic, 'projects': projects, 'upload_url': upload_url, 'errors': {} } self.render(template, context) else: self.redirect('/logout')
def get(self, username): """display profile of user with username, if None, display logged in user """ mode = self.request.get('mode') upload_url = "" if mode == 'add_project': template = 'profile/add_project.html' upload_url = blobstore.create_upload_url('/' + username, max_bytes_per_blob=self.MAX_IMG_SIZE) elif mode == 'edit_project': template = 'profile/edit_project.html' upload_url = blobstore.create_upload_url('/' + username, max_bytes_per_blob=self.MAX_IMG_SIZE) elif mode == 'edit': template = 'profile/edit.html' else: template = 'profile/profile.html' user = User.get_user(username) if not user: user = User.save(username, '{}@someplace.com'.format(username), 'some long password') gravatar = user.avatar_url friends = [] if user: all, ic, cc = self.organize_courses_for(user) if user.dob: dob = user.dob.strftime('%m/%d/%Y') else: dob = None projects = Project.get_projects_by_ids(user.projects) context = {'user': user, 'dob': dob, 'username': username, 'gravatar': gravatar, 'friends': friends, 'friend_btn': False, 'courses_all': Course.courses_to_dict(), 'courses_completed': cc, 'courses_incomplete': ic, 'projects': projects, 'upload_url': upload_url, 'errors': {}} self.render(template, context) else: self.redirect('/logout')
def projects_make_public_or_private(): if request.method == 'POST': if 'session_id' not in session: return redirect(url_for('auth.auth')) json_body = { "ProjectId": request.form['action'], "Mode": request.form['val'] } response = Project.make_public(json_body) flash(response['Message']) return redirect(url_for('projects.projects'))
def browse(): if 'session_id' not in session: return redirect(url_for('auth.auth')) search_results = SearchItem.get_search_items( {'Parameters': { "ProjectName": 'none' }}) projects = Project.get_users_projects() return render_template('browse.html', items=search_results, projects=projects, session=session['session_id'])
def get_user_history(Id): userInfo = session.get('userProfile', 'not set') if userInfo['role'] !='admin': abort(401) # Get user details user = Users.query.get(Id) user = user.format() # Get all projects of the user project = Project.query.join(Map_users_proj, Map_users_proj.p_id==Project.p_id)\ .add_columns(Project.p_id.label('id'), Project.p_name.label('name'))\ .filter(Map_users_proj.users_id==Id) # Get all the projects sql = text("""select p_id,p_name,p_desc,p_start_date, p_end_date from project where p_id not in (select p_id from map_users_proj where users_id ="""+str(Id)+""")""") all_project = db.session.execute(sql) all_project = [Project.format(p) for p in all_project] # Get the tickets of the user/dev/manager ticket = "" #user submitted tickets if user['role']=='user' or user['role']=='manager': ticket = Ticket.query.join(Project, Ticket.p_id==Project.p_id)\ .add_columns(Ticket.t_id.label('id'), Ticket.t_title.label('title'), Project.p_name.label('project'))\ .filter(Ticket.submitter_email==user['email']) #Developer Assigned tickets elif user['role']=='dev': ticket = Ticket.query.join(Project, Ticket.p_id==Project.p_id)\ .add_columns(Ticket.t_id.label('id'), Ticket.t_title.label('title'), Project.p_name.label('project'))\ .filter(Ticket.users_id==Id) delete_user = False if Id > 21 or userInfo['id'] == 1: delete_user = True data = { 'users' : [user], 'projects': project, 'all_projects': all_project, 'ticket': ticket, 'delete_user': delete_user, 'user_name': userInfo['name'], 'role': userInfo['role'], 'page' : 'userDetail' } return render_template('user-details.html',data=data)
def projects_create(): if request.method == 'POST': if 'session_id' not in session: return redirect(url_for('auth.auth')) if 'public' in request.form: public = 1 else: public = 0 json_body = { "Name": request.form['projectName'], "Desc": request.form['projectDesc'], "Public": public } response = Project.create_project(json_body) flash(response['Message']) return redirect(url_for('projects.projects'))
def to_JSON(self): user = User.get_by_id(self.master_id) if self.isProject: group = Project.get_by_id(self.groupId) else: group = Course.get_by_id(self.groupId) data = { 'groupId' : self.groupId, 'message' : self.message, 'date' : { 'year': self.msgDate.year, 'month': self.msgDate.month, 'day': self.msgDate.day, 'hour': self.msgDate.hour, 'minute': self.msgDate.minute }, 'id' : self.key().id(), 'master_id' : self.master_id, 'isProject' : self.isProject, 'user': json.loads(user.to_JSON()), 'group': json.loads(group.to_JSON()) } return json.dumps(data)
def get_dev_project(): userInfo = session.get('userProfile', 'not set') dev_email = userInfo['email'] if userInfo['role'] != 'dev' and userInfo['role'] != 'manager': abort(401) #fetch list of projects that the Developer is assigned to using the map table #join Project, map_users_proj on project id #join map_users_proj, users on user_id #The map_users_proj table contains the maping of project to user project = Project.query.join(Map_users_proj, Map_users_proj.p_id == Project.p_id)\ .join(Users, Users.users_id == Map_users_proj.users_id).filter(Users.users_email == dev_email).all() project = [Project.format(pro) for pro in project] data = { 'project': project, 'user_name': userInfo['name'], 'role': userInfo['role'], 'notify': notification.notify(userInfo['id']), 'page': 'projects' } return render_template('list.html', data=data)
from application import db from models.User import User from models.Subject import Subject from models.Project import Project from models.Document import Document Subject.query.delete() Project.query.delete() # CREATE DOMAIN OBJECTS Engineering = Subject("Engineering") DataScience = Subject("Data Science") DigitalAudioEqualizer = Project(title="Digital Audio Equalizer", academic=True, subject=Engineering) FuzzyLogicClusteringAlgorithm = Project(title="Fuzzy Logic Clustering Algorithm", academic=False, subject=DataScience) # ADD AND COMMIT db.session.add_all([Engineering, DataScience, DigitalAudioEqualizer, FuzzyLogicClusteringAlgorithm]) db.session.commit() # PRINT print(Subject.query.all()) # CREATE RELATIONSHIPS
def getUsersByProject(token, projectId): """ <span class="card-title">>This Call will return all users in Project</span> <br> <b>Route Parameters</b><br> - seToken: 'seToken'<br> - projectId: 123456789 <br> <br> <b>Payload</b><br> - NONE <br> <br> <b>Response</b> <br> 200 - JSON Example:<br> <code> {<br> 'username': '******',<br> 'name': 'Darth Vader',<br> 'email': '[email protected],<br> 'isLecturer': 'True',<br> 'seToken': 'xxxxxx-xxxxx-xxxxx-xxxxxx',<br> 'avatar_url': 'http://location.git.com/somthing'<br> 'isFirstLogin': False,<br> 'campuses_id_list': [43243532532,5325325325,532532342],<br> 'courses_id_list': [53523,43432423,432432432432]<br> } </code> <br> 403 - No User Found """ if token is None: return no_content("Token Is Empty, No User Found") user = get_user_by_token(token) if user is None: return bad_request("Bad User Token") try: project = Project.get_by_id(int(projectId)) except Exception as e: return bad_request("Bad id format") if project is None: return bad_request("No such Project") arr = [] for u in enumerate(project.membersId): u = json.loads(User.get_by_id(int(u)).to_JSON()) arr.append(dict(u)) if len(arr) != 0: return Response(response=json.dumps(arr), status=200, mimetype="application/json") else: return Response(response=[], status=200, mimetype="application/json")
def post(self, username): mode = self.request.get('mode') if mode == 'add_project': blob_info = None fileerror = 'Screenshot is mandatory' upload_files = self.get_uploads('screenshot') if upload_files: blob_info = upload_files[0] if 'image' in blob_info.content_type: screenshot = blob_info.key() screenshot_url = images.get_serving_url(screenshot) fileerror = '' else: # uploaded file wasn't an images, hence remove from the blobstore blobstore.delete(blob_info.key()) fileerror = 'Invalid image type' else: fileerror = 'Please provide a screenshot of your project (max size: 1MB)' title = self.request.get('title').strip() titleerror = validate_project_title(title) url = self.request.get('url').strip() urlerror = validate_project_url(url) short_description = self.request.get('short_description').strip() sderror = validate_project_short_description(short_description) if titleerror or urlerror or sderror or fileerror: if blob_info and not fileerror: # blob was okay but validation of some other field failed # hence remove it to avoid orphaned entry # also remove the serving url Project.remove_screenshot_blob(blob_info.key()) user = User.get_user(username) template = 'profile/add_project.html' upload_url = blobstore.create_upload_url('/' + username, max_bytes_per_blob=self.MAX_IMG_SIZE) context = { 'user': user, 'username': username, 'title': title, 'url': url, 'short_description': short_description, 'upload_url': upload_url, 'titleerror': titleerror, 'urlerror': urlerror, 'sderror': sderror, 'fileerror': fileerror} self.render(template, context) return else: user = User.get_user(username) project_id = Project.add_project(title=title, screenshot=screenshot, screenshot_url=screenshot_url, url=url, short_description=short_description, author=user.key) User.add_project(username, project_id) elif mode == 'edit_project': blob_info = None screenshot = None screenshot_url = None fileerror = '' upload_files = self.get_uploads('screenshot') if upload_files: blob_info = upload_files[0] if 'image' in blob_info.content_type: screenshot = blob_info.key() screenshot_url = images.get_serving_url(screenshot) else: # uploaded file wasn't an images, hence remove from the blobstore blobstore.delete(blob_info.key()) fileerror = 'Invalid image type' project_id = self.request.get('projects_dropdown') title = self.request.get('title').strip() titleerror = validate_project_title(title) url = self.request.get('url').strip() urlerror = validate_project_url(url) short_description = self.request.get('short_description').strip() sderror = validate_project_short_description(short_description) if titleerror or urlerror or sderror or fileerror: if blob_info and not fileerror: # same as above Project.remove_screenshot_blob(blob_info.key()) user = User.get_user(username) projects = Project.get_projects_by_ids(user.projects) upload_url = blobstore.create_upload_url('/' + username, max_bytes_per_blob=self.MAX_IMG_SIZE) template = 'profile/edit_project.html' context = { 'user': user, 'username': username, 'title': title, 'url': url, 'short_description': short_description, 'projects': projects, 'upload_url': upload_url, 'titleerror': titleerror, 'urlerror': urlerror, 'sderror': sderror, 'fileerror': fileerror } self.render(template, context) return else: Project.update_project(project_id, title=title, screenshot=screenshot, screenshot_url=screenshot_url, url=url, short_description=short_description) elif mode == 'remove_project': project_id = self.request.get('project_id') Project.remove_project(project_id) User.remove_project(username, project_id) elif mode == 'edit': fields = self.get_params_dict(( 'real_name', 'email', 'short_about', 'dob', 'tools', 'password', 'password_confirm', 'notify_on_msg' )) logging.error(fields) iclasses = self.request.get_all('classes_inprog') cclasses = self.request.get_all('classes_completed') fields['iclasses'] = iclasses fields['cclasses'] = cclasses fields['username'] = username user = Key(User, username).get() errors = self.clean_user_data(user, **fields) context = { 'errors': errors, 'user': user } if not errors: user.update(**fields) self.redirect('/{}'.format(username)) else: if user.dob: dob = user.dob.strftime('%m/%d/%Y') else: dob = None all, ic, cc = self.organize_courses_for(user) context['courses_all'] = Course.courses_to_dict() context['courses_completed'] = cc context['courses_incomplete'] = ic context['dob'] = dob context['username'] = username context['gravatar'] = user.avatar_url context['friends'] = [] context['friend_btn'] = False context['errors'] = errors self.render('profile/edit.html'.format(username), context) return self.redirect('/'+username)
def removeUserFromCourse(token, userId, courseId): """ <span class="card-title">>This Call will remove a user from a course</span> <br> <b>Route Parameters</b><br> - seToken: 'seToken'<br> - userId: 0987654321,<br> - 'courseId': 1234567890<br> <br> <br> <b>Payload</b><br> - NONE {<br> }<br> <br> <b>Response</b> <br> 200 - User updated <br> 400 - Bad Request """ requestingUser = get_user_by_token(token) if requestingUser is None: return bad_request("Bad User Token") try: userToRemove = User.get_by_id(int(userId)) except Exception as e: return bad_request("Bad id format") if userToRemove is None: return bad_request("No such user to remove") #check Course Exists course = Course.get_by_id(int(courseId)) if course is None: return bad_request("No such Course!") #check if user is owner of Course if requestingUser.key().id() != course.master_id: # check if user want to delete itself if requestingUser.key().id() != userToRemove.key().id(): return forbidden("No permission to delete user") try: userToRemove.courses_id_list.remove(courseId) course.membersId.remove(userToRemove.key().id()) except Exception as e: return bad_request("user is not listed to this course") #remove user from all projects in course projects = Project.all().filter("courseId =", course.key().id()) for p in projects: if p.key().id() in userToRemove.projects_id_list: userToRemove.projects_id_list.remove(p.key().id()) p.membersId.remove(userToRemove.key().id()) db.put(p) db.put(userToRemove) db.put(course) db.save return Response(response=userToRemove.to_JSON(), status=200, mimetype="application/json") # Real response!
def post(self, username): mode = self.request.get('mode') if mode == 'add_project': blob_info = None fileerror = 'Screenshot is mandatory' upload_files = self.get_uploads('screenshot') if upload_files: blob_info = upload_files[0] if 'image' in blob_info.content_type: screenshot = blob_info.key() screenshot_url = images.get_serving_url(screenshot) fileerror = '' else: # uploaded file wasn't an images, hence remove from the blobstore blobstore.delete(blob_info.key()) fileerror = 'Invalid image type' else: fileerror = 'Please provide a screenshot of your project (max size: 1MB)' title = self.request.get('title').strip() titleerror = validate_project_title(title) url = self.request.get('url').strip() urlerror = validate_project_url(url) short_description = self.request.get('short_description').strip() sderror = validate_project_short_description(short_description) if titleerror or urlerror or sderror or fileerror: if blob_info and not fileerror: # blob was okay but validation of some other field failed # hence remove it to avoid orphaned entry # also remove the serving url Project.remove_screenshot_blob(blob_info.key()) user = User.get_user(username) template = 'profile/add_project.html' upload_url = blobstore.create_upload_url( '/' + username, max_bytes_per_blob=self.MAX_IMG_SIZE) context = { 'user': user, 'username': username, 'title': title, 'url': url, 'short_description': short_description, 'upload_url': upload_url, 'titleerror': titleerror, 'urlerror': urlerror, 'sderror': sderror, 'fileerror': fileerror } self.render(template, context) return else: user = User.get_user(username) project_id = Project.add_project( title=title, screenshot=screenshot, screenshot_url=screenshot_url, url=url, short_description=short_description, author=user.key) User.add_project(username, project_id) elif mode == 'edit_project': blob_info = None screenshot = None screenshot_url = None fileerror = '' upload_files = self.get_uploads('screenshot') if upload_files: blob_info = upload_files[0] if 'image' in blob_info.content_type: screenshot = blob_info.key() screenshot_url = images.get_serving_url(screenshot) else: # uploaded file wasn't an images, hence remove from the blobstore blobstore.delete(blob_info.key()) fileerror = 'Invalid image type' project_id = self.request.get('projects_dropdown') title = self.request.get('title').strip() titleerror = validate_project_title(title) url = self.request.get('url').strip() urlerror = validate_project_url(url) short_description = self.request.get('short_description').strip() sderror = validate_project_short_description(short_description) if titleerror or urlerror or sderror or fileerror: if blob_info and not fileerror: # same as above Project.remove_screenshot_blob(blob_info.key()) user = User.get_user(username) projects = Project.get_projects_by_ids(user.projects) upload_url = blobstore.create_upload_url( '/' + username, max_bytes_per_blob=self.MAX_IMG_SIZE) template = 'profile/edit_project.html' context = { 'user': user, 'username': username, 'title': title, 'url': url, 'short_description': short_description, 'projects': projects, 'upload_url': upload_url, 'titleerror': titleerror, 'urlerror': urlerror, 'sderror': sderror, 'fileerror': fileerror } self.render(template, context) return else: Project.update_project(project_id, title=title, screenshot=screenshot, screenshot_url=screenshot_url, url=url, short_description=short_description) elif mode == 'remove_project': project_id = self.request.get('project_id') Project.remove_project(project_id) User.remove_project(username, project_id) elif mode == 'edit': fields = self.get_params_dict( ('real_name', 'email', 'short_about', 'dob', 'tools', 'password', 'password_confirm', 'notify_on_msg')) logging.error(fields) iclasses = self.request.get_all('classes_inprog') cclasses = self.request.get_all('classes_completed') fields['iclasses'] = iclasses fields['cclasses'] = cclasses fields['username'] = username user = Key(User, username).get() errors = self.clean_user_data(user, **fields) context = {'errors': errors, 'user': user} if not errors: user.update(**fields) self.redirect('/{}'.format(username)) else: if user.dob: dob = user.dob.strftime('%m/%d/%Y') else: dob = None all, ic, cc = self.organize_courses_for(user) context['courses_all'] = Course.courses_to_dict() context['courses_completed'] = cc context['courses_incomplete'] = ic context['dob'] = dob context['username'] = username context['gravatar'] = user.avatar_url context['friends'] = [] context['friend_btn'] = False context['errors'] = errors self.render('profile/edit.html'.format(username), context) return self.redirect('/' + username)
def getProjects(self): return [ Project(tuple) for tuple in self._db.execute("select * from Project").fetchall() ]
def getProject(self, ProjectID): return [ Project(tuple) for tuple in self._db.execute(""" select * from Project where ProjectID={id}""".format( id=ProjectID)).fetchall() ][0]
def getProjectsForTeacher(self, TeacherID): return [ Project(tuple) for tuple in self._db.execute(""" select * from Project where TeacherID={id};""".format( id=TeacherID)).fetchall() ]