def post(self, project_id): post_data = request.get_json(silent=True, force=True) try: user_email = post_data["member_email"] except KeyError as err: response = { "success": False, "msg": f'{str(err)} key is not present' } return make_response(jsonify(response)), 400 # Check if user exists user_obj = find_by_email(user_email) if not user_obj: response = {'success': False, 'msg': 'User does not exist'} return make_response(jsonify(response)), 404 user = to_json(user_obj) roles = get_user_roles(user['id'], project_id) # Check if user is already not admin if 'admin' not in roles: response = {'success': False, 'msg': 'User is already not admin'} return make_response(jsonify(response)), 400 admin_team = find_admin_team_of_project(project_id) delete_by_user_id_team_id(user['id'], admin_team['id']) response = { 'success': True, 'msg': 'User removed as admin', } return make_response(jsonify(response)), 200
def wrap(*args, **kwargs): # Get current user user_id = get_jwt_identity() # Get project and admin_id project_id = kwargs.get('project_id') project = find_by_project_id(project_id) if not project: response = { 'success': False, 'msg': 'Project does not exist', } return make_response(jsonify(response)), 404 user_roles = get_user_roles(user_id, project_id) # If current user does not have models or admin role, then unauthorized if 'admin' not in user_roles and 'models' not in user_roles: response = { 'success': False, 'msg': 'Only a models team member can access this route', } return make_response(jsonify(response)), 401 # Else continue return fun(*args, **kwargs)
def delete(self, label_id, project_id): current_user = get_jwt_identity() roles = get_user_roles(current_user, project_id) if "admin" not in roles: if "labels" not in roles: print("Error occured: user not admin or has labels role") response = { "success": False, "msg": "User neither has 'admin' nor 'labels' role." } return make_response(jsonify(response)), 403 try: if not label_id: response = {"success": False, "msg": "Label id not provided"} return make_response(jsonify(response)), 500 delete_label(label_id) response = {"success": True, "msg": "Label deleted."} return make_response(jsonify(response)), 200 except Exception: response = {"success": False, "msg": "Something went wrong!"} # Return a server error using the HTTP Error Code 500 (Internal # Server Error) return make_response(jsonify(response)), 500
def wrap(*args, **kwargs): # Get current user user_id = get_jwt_identity() # Get project and admin_id project_id = kwargs.get('project_id') project = find_by_project_id(project_id) if not project: response = { 'success': False, 'msg': 'Project does not exist', } return make_response(jsonify(response)), 404 user_roles = get_user_roles(user_id, project_id) # If current user has no roles in the project, then unauthorized if len(user_roles) == 0: response = { 'success': False, 'msg': 'Only a project member can access this route', } return make_response(jsonify(response)), 401 # Else continue return fun(*args, **kwargs)
def get(self, project_id): user_id = get_jwt_identity() roles = get_user_roles(user_id, project_id) response = { 'success': True, 'body': roles, } return make_response(jsonify(response)), 200
def put(self, label_id, project_id): """Handle PUT request for this view. Url --> /api/v1/Label/<int:label_id>/<int:project_id>""" # getting JSON data from request current_user = get_jwt_identity() roles = get_user_roles(current_user, project_id) if "admin" not in roles: if "labels" not in roles: print("Error occured: user not admin or has role of labels") response = { "success": False, "msg": "User neither has 'admin' nor 'labels' role." } return make_response(jsonify(response)), 403 post_data = request.get_json(silent=True, force=True) try: label_name = post_data["label_name"] label_type = post_data["label_type"] except Exception: response = { "success": False, "msg": "Please provide all the required fields." } return make_response(jsonify(response)), 400 if label_type not in allowed_labels: print("Error occured: label type not allowed") response = {"success": False, "msg": "Label type not allowed."} return make_response(jsonify(response)), 400 try: label = find_by_id(label_id) if not label: response = {"success": False, "msg": "Label not present."} return make_response(jsonify(response)), 404 data = {"label_name": label_name, "label_type": label_type} label_new = update_label(label_id, data) response = { "success": True, "msg": "Label updated.", "body": label_new } return make_response(jsonify(response)), 201 except Exception as err: print("Error occurred: ", err) response = {"success": False, "msg": "Label not present."} return make_response(jsonify(response)), 404
def put(self, project_id, team_id): """Handle PUT request for this view. Url --> /api/v1/team/team_info/<int:project_id>/<int:team_id>""" # getting JSON data from request post_data = request.get_json(silent=True, force=True) current_user = get_jwt_identity() roles = get_user_roles(current_user, project_id) if "admin" not in roles: print("Error occured: user not admin") response = {"success": False, "msg": "User not admin."} return make_response(jsonify(response)), 403 try: team_name = post_data["teamname"] role = post_data["role"] except KeyError as err: response = { "success": False, "msg": f'{str(err)} key is not present' } return make_response(jsonify(response)), 400 try: if role not in allowed_teams: response = { "success": False, "msg": "Team role is not allowed." } return make_response(jsonify(response)), 400 if not (team_id): response = {"success": False, "msg": "Team id is not provided"} return make_response(jsonify(response)), 400 team = find_by_id(team_id) if not team: response = {"success": False, "msg": "Team not present."} return make_response(jsonify(response)), 404 data = {"team_name": team_name, "role": role} team_new = update_team(team_id, data) response = { "success": True, "msg": "Team updated!!", "body": team_new } return make_response(jsonify(response)), 201 except Exception as err: print("Error occured: ", err) response = {"success": False, "msg": "Something went wrong!!"} return make_response(jsonify(response)), 500
def post(self, project_id): """ Handle POST request for this view. Url --> /api/v1/label/create/<int:project_id> """ # getting JSON data from request current_user = get_jwt_identity() roles = get_user_roles(current_user, project_id) if "admin" not in roles: if "labels" not in roles: print("Error occured: user not admin or has labels role") response = { "success": False, "msg": "User neither has 'admin' nor 'labels' role." } return make_response(jsonify(response)), 403 post_data = request.get_json(silent=True, force=True) try: label_name = post_data["label_name"] label_type = post_data["label_type"] except Exception: response = { "success": False, "msg": "Please provide all the required fields." } return make_response(jsonify(response)), 400 if label_type not in allowed_labels: print("Error occured: label type not allowed") response = {"success": False, "msg": "Label type not allowed."} return make_response(jsonify(response)), 400 """Save the new Label.""" try: label = Label(label_name=label_name, label_type=label_type, project_id=project_id) label_new = save_label(label) except Exception as err: print("Error occured: ", err) response = {"success": False, "msg": "Something went wrong!!"} return make_response(jsonify(response)), 500 response = { "success": True, "msg": "Your Label was created successfully.", "body": label_new } # return a response notifying the user that they registered # successfully return make_response(jsonify(response)), 201
def post(self, project_id): """ Handle POST request for this view. Url --> /api/v1/project/remove_project_member/<int:project_id> """ # getting JSON data from request post_data = request.get_json(silent=True, force=True) current_user = get_jwt_identity() roles = get_user_roles(current_user, project_id) if "admin" not in roles: print("Error occured: user not admin") response = {"success": False, "msg": "User not admin."} return make_response(jsonify(response)), 403 try: user_email = post_data["member_email"] except KeyError as err: response = { "success": False, "msg": f'{str(err)} key is not present' } return make_response(jsonify(response)), 400 try: user_obj = find_by_email(user_email) user = to_json(user_obj) if not user: response = {"success": False, "msg": "User not found."} return make_response(jsonify(response)), 404 try: team_ids = get_teams_of_user_in_project(user['id'], project_id) for id in team_ids: delete_by_user_id_team_id(user['id'], id) project_members = count_users_in_team(id) if project_members == 0: delete_team(id) response = {"success": True, "msg": "ProjectMember deleted."} return make_response(jsonify(response)), 200 except Exception: response = { "success": False, "msg": "Could not delete projectmember from all teams" } return make_response(jsonify(response)), 500 except Exception: response = {"success": False, "msg": "Something went wrong!!"} return make_response(jsonify(response)), 500
def post(self, project_id): current_user = get_jwt_identity() roles = get_user_roles(current_user, project_id) if "admin" not in roles: if "images" not in roles: print("Error occured: user not admin or has images role") response = { "success": False, "msg": "User neither has 'admin' nor 'images' role." } return make_response(jsonify(response)), 403 post_data = request.get_json(silent=True, force=True) try: images_id = post_data["images"] except KeyError as err: response = { "success": False, "msg": f'{str(err)} key is not present' } return make_response(jsonify(response)), 400 try: for id in images_id: remove_image(id) delete_by_id(id) response = { "success": True, "msg": "Images deleted." } return make_response(jsonify(response)), 200 except Exception: response = { "success":False, "msg": "Something went wrong!" } # Return a server error using the HTTP Error Code 500 (Internal # Server Error) return make_response(jsonify(response)), 500
def delete(self, project_id, team_id): """Handle DELETE request for this view. Url --> /api/v1/team/team_info/<int:project_id>/<int:team_id>""" current_user = get_jwt_identity() roles = get_user_roles(current_user, project_id) if "admin" not in roles: print("Error occured: user not admin") response = {"success": False, "msg": "User not admin."} return make_response(jsonify(response)), 403 try: if not team_id: response = {"success": False, "msg": "Team id is missing"} return make_response(jsonify(response)), 400 delete_team(team_id) response = {"success": True, "msg": "Team deleted."} return make_response(jsonify(response)), 200 except Exception: response = {"success": False, "msg": "Something went wrong."} return make_response(jsonify(response)), 500
def post(self, project_id, team_id): """ Handle POST request for this view. Url --> /api/v1/team/add_team_member/<int:project_id>/<int:team_id> """ # getting JSON data from request post_data = request.get_json(silent=True, force=True) current_user = get_jwt_identity() roles = get_user_roles(current_user, project_id) if "admin" not in roles: print("Error occured: user not admin") response = {"success": False, "msg": "User not admin."} return make_response(jsonify(response)), 403 try: user_email = post_data["member_email"] user_obj = find_by_email(user_email) user = to_json(user_obj) if not user: response = {"success": False, "msg": "User not found."} return make_response(jsonify(response)), 404 team = find_by_id(team_id) if not team: response = {"success": False, "msg": "Team does not exist."} return make_response(jsonify(response)), 404 project_member = save_projectmember(user['id'], team['id']) team_new = find_by_id(project_member['team_id']) res = {"project_member": project_member, "team": team_new} response = { "success": True, "msg": "Team member added.", "body": res } return make_response(jsonify(response)), 201 except Exception: response = {"success": False, "msg": "Could not save team member."} return make_response(jsonify(response)), 500
def put(self, image_id): current_user = get_jwt_identity() post_data = request.get_json(silent=True, force=True) try: labels = post_data["labels"] height = post_data["height"] width = post_data["width"] project_id = post_data["project_id"] labelled = post_data["labelled"] except KeyError as err: response = { "success": False, "msg": f'{str(err)} key is not present' } return make_response(jsonify(response)), 400 try: roles = get_user_roles(current_user, project_id) if "admin" not in roles: if "image labelling" not in roles: print( "Error occured: user not admin or has image labelling role" ) response = { "success": False, "msg": "User neither has 'admin' nor 'image labelling' role." } return make_response(jsonify(response)), 403 format_data = [] for label_id in labels: if labels[label_id]: for i in range(len(labels[label_id])): labels[label_id][i]['label_id'] = int(label_id) format_data.append(labels[label_id][i]) labels = format_data if not image_id: response = {"success": False, "msg": "Image id not provided"} return make_response(jsonify(response)), 400 image = find_by_id(image_id) if not image: response = {"success": False, "msg": "Image not present"} return make_response(jsonify(response)), 404 data = {"height": height, "width": width, "labelled": labelled} # Converting labeldata in the format the frontend # understands the data. new_image = update_image(image_id, data) existing_labeldata = find_by_image_id(image_id) existing_labeldata_ids = [] response_labels_ids = [] if existing_labeldata: for i in range(len(existing_labeldata)): existing_labeldata_ids.append(existing_labeldata[i]['id']) for i in range(len(labels)): response_labels_ids.append(labels[i]['id']) missing_labelsdata = list( set(existing_labeldata_ids) - set(response_labels_ids)) if missing_labelsdata: for i in range(len(missing_labelsdata)): delete_labeldata(missing_labelsdata[i]) new_labeldatas = [] res_labeldata = {} for i in range(len(labels)): labeldata = find_labeldata(labels[i]['id']) if not labeldata: labeldata_to_save = LabelData( id=labels[i]['id'], image_id=image_id, label_id=labels[i]['label_id']) new_labeldata = save_labeldata(labeldata_to_save) for j in range(len(labels[i]['points'])): point_to_save = Point( id=labels[i]['points'][j]['id'], labeldata_id=new_labeldata['id'], x_coordinate=labels[i]['points'][j]['lat'], y_coordinate=labels[i]['points'][j]['lng']) save_point(point_to_save) else: labeldata_data = {"label_id": labels[i]['label_id']} update_labeldata(labels[i]['id'], labeldata_data) for point in labels[i]['points']: point_data = { "x_coordinate": point['lat'], "y_coordinate": point['lng'] } update_point(point['id'], point_data) labeldata = find_labeldata(labels[i]['id']) labeldata['label_type'] = labels[i]['label_type'] new_labeldatas.append(labeldata) if res_labeldata.get(int(labeldata['label_id'])) is None: res_labeldata[int(labeldata['label_id'])] = [] res_labeldata[int(labeldata['label_id'])].append(labeldata) res_data = { "height": new_image['height'], "width": new_image['width'], "labelled": new_image['labelled'], "labeldata": res_labeldata, "project_id": project_id } response = { "success": True, "msg": "Labels updated.", "body": res_data } return make_response(jsonify(response)), 200 except Exception as err: response = {"success": False, "msg": "Something went wrong!"} # Return a server error using the HTTP Error Code 500 (Internal # Server Error) return make_response(jsonify(response)), 500
def post(self, project_id): """ Handle POST request for this view. Url --> /api/v1/image/create/<int:project_id> """ current_user = get_jwt_identity() roles = get_user_roles(current_user, project_id) if "admin" not in roles: if "images" not in roles: print("Error occured: user not admin or has images role") response = { "success": False, "msg": "User neither has 'admin' nor 'images' role." } return make_response(jsonify(response)), 403 try: images = request.files.getlist("images") except KeyError as err: response = { "success": False, "msg": f'{str(err)} key is not present' } return make_response(jsonify(response)), 400 project_id = project_id user_id = current_user if not project_id: response = { "success": False, "msg": "project id is not provided." } return make_response(jsonify(response)), 400 # Saving the images on the server and # then saving them to the database. try: images_new = [] for i in range(len(images)): image = images[i] image_name = image.filename.split('.')[0] ext = image.filename.split('.')[1] now = datetime.now() timestamp = datetime.timestamp(now) image_url = f"{user_id}_{image_name}_{timestamp}.{ext}" convert_and_save(image, project_id, image_url) img_data = get_dimensions(image) image_to_save = Image( image_name = image_name, image_url = image_url, height = img_data['height'], width = img_data['width'], labelled = False, project_id = project_id ) image_new = save_image(image_to_save) images_new.append(image_new) response = { "success": True, "msg": "image saved to the server.", "body": images_new } return make_response(jsonify(response)), 201 except Exception as err: print("Error occured: ", err) response = { "success": False, "msg": "Could not save images to the server." } return make_response(jsonify(response)), 500
def post(self, project_id): """ Handle POST request for this view. Url --> /api/v1/project/add_project_member/<int:project_id> """ # getting JSON data from request post_data = request.get_json(silent=True, force=True) current_user = get_jwt_identity() roles = get_user_roles(current_user, project_id) if "admin" not in roles: print("Error occured: user not admin") response = {"success": False, "msg": "User not admin."} return make_response(jsonify(response)), 403 try: user_email = post_data["member_email"] team_name = post_data["team_name"] role = post_data["role"] except KeyError as err: response = { "success": False, "msg": f'{str(err)} key is not present' } return make_response(jsonify(response)), 400 try: if role not in allowed_teams: response = { "success": False, "msg": "Team role is not allowed." } return make_response(jsonify(response)), 400 user_obj = find_by_email(user_email) user = to_json(user_obj) if not user: response = {"success": False, "msg": "User not found."} return make_response(jsonify(response)), 404 roles = get_user_roles(user['id'], project_id) if "admin" in roles: print("Error occured: user already admin") response = {"success": False, "msg": "User already admin."} return make_response(jsonify(response)), 400 team_exist = find_by_team_name(team_name) if team_exist: project_member_exist = find_by_user_id_team_id( user['id'], team_exist['id']) if team_exist and team_name == "admin": response = { "success": False, "msg": "Admin role already exists." } return make_response(jsonify(response)), 400 if team_exist and project_member_exist: response = { "success": False, "msg": "Projectmember already exists in this team." } return make_response(jsonify(response)), 400 if not team_exist: try: team = Team(team_name=team_name, project_id=project_id, role=role) team_exist = save_team(team) except Exception as err: print("Error occured: ", err) response = { "success": False, "msg": "Could not save a team." } return make_response(jsonify(response)), 400 try: project_member = ProjectMember(user_id=user['id'], team_id=team_exist['id']) project_member_new = save_project_member(project_member) user_added = find_by_user_id(project_member_new['user_id']) response = { "success": True, "msg": "ProjectMember added.", "body": user_added } return make_response(jsonify(response)), 201 except Exception as err: print("Error occured: ", err) response = { "success": False, "msg": "Could not save the projectmember." } return make_response(jsonify(response)), 500 except Exception: response = {"success": False, "msg": "Something went wrong!!"} return make_response(jsonify(response)), 500