Esempio n. 1
0
    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
Esempio n. 2
0
  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)
Esempio n. 3
0
    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
Esempio n. 4
0
    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)
Esempio n. 5
0
 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
Esempio n. 6
0
    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
Esempio n. 7
0
    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
Esempio n. 8
0
    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
Esempio n. 10
0
    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
Esempio n. 11
0
    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
Esempio n. 12
0
    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
Esempio n. 13
0
    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
Esempio n. 14
0
    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
Esempio n. 15
0
    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