def __init__(self):
     self.model = ProjectModel()
     self.projectSelection = ProjectSelection()
     self.newProjectDialog = NewProjectDialog()
     self.project = None
     self.__addEventHandlers()
     self.__populateProjectList()
Example #2
0
 def add_project():
     try:
         request_data = request.data
         request_data = json.loads(request_data)
     except:
         return jsonify({
             "message": "Không thể lấy dữ liệu!",
             "code": 412
         }), 412
     all_project_inserts = list()
     if isinstance(request_data, dict):
         request_data = [request_data]
     for data in request_data:
         all_project_inserts.append({
             "Ten": data.get("ten"),
             "MoTa": data.get("mota"),
             "TrangThai": "Chưa được chọn",
             "NguoiTao": data.get("nguoitao"),
             "Loai": data.get("loai", ""),
             "GhiChu": data.get("ghichu", ""),
             "Cap": data.get("cap", ""),
             "ChiDinh": data.get("chi_dinh"),
             "ThoiGianTao": get_current_time(),
             "ThoiGianCapNhat": get_current_time(),
         })
     if all_project_inserts:
         try:
             ProjectModel.insert_many_project(all_project_inserts)
         except Exception as e:
             print(e)
             return jsonify({
                 "message": "Có lỗi phát sinh trong server!",
                 "code": 500
             }), 500
     return jsonify({"message": "Tạo đề tài thành công!", "code": 200}), 200
Example #3
0
    def get_by_project_teacher(teacher_id):
        result = list()
        id_std = request.args.get("id_std")

        try:
            ma_gv = TeacherModel.get_magvhd_by_id(teacher_id=teacher_id)
            projects = ProjectModel.get_project_by_teacher(ma_gv)
            cap = StudentModel.get_level_student_id(id_std)
        except Exception as e:
            print(e)
            return jsonify({
                "message": "Có lỗi phát sinh trong server!",
                "code": 500
            }), 500
        for project in projects:
            check = StudentModel.get_data_by_project(project.id)
            if id_std and str(project.Cap) != str(cap):
                continue
            result.append({
                "id": project.id,
                "Ten": project.Ten,
                "Mota": project.MoTa,
                "TrangThai": project.TrangThai if not check else "Đã chọn",
                "GhiChu": project.GhiChu,
                "Cap": project.Cap
            })
        return jsonify({
            "message": "request thành công!",
            "data": result,
            "code": 200
        }), 200
Example #4
0
 def get_all_project():
     result = list()
     try:
         projects = ProjectModel.get_all_project()
     except Exception as e:
         print(e)
         return jsonify({
             "message": "Có lỗi phát sinh trong server!",
             "code": 500
         }), 500
     for project in projects:
         check = StudentModel.get_data_by_project(project.id)
         result.append({
             "id": project.id,
             "Ten": project.Ten,
             "Mota": project.MoTa,
             "TrangThai": project.TrangThai if not check else "Đã chọn",
             "GhiChu": project.GhiChu,
             "Cap": project.Cap
         })
     return jsonify({
         "message": "request thành công!",
         "data": result,
         "code": 200
     }), 200
Example #5
0
    def get_all_teacher_not_enough_student():
        soluong = request.args.get("soluong", SoLuongSV.GVTiepNhan)
        id_std = request.args.get("id_std")

        try:
            cap = StudentModel.get_level_student_id(student_id=id_std)
            all_code_teachers = list()
            all_project_teachers = ProjectModel.get_project_by_cap(cap)
            for project in all_project_teachers:
                all_code_teachers.append(project.ChiDinh)
            teachers = TeacherModel.get_teacher_by_lt_soluong_tids(
                soluong=soluong,
                codes=all_code_teachers
            )
        except Exception as e:
            return jsonify({"messgae": str(e), "code": 500}), 500
        result = list()
        for teacher in teachers:
            data_teacher = {
                "ten": teacher.Ten,
                "soluong": teacher.SoLuong,
                "magv": teacher.MaGV,
                "email": teacher.Email
            }
            result.append(data_teacher)
        return jsonify({"messgae": "Lấy thông tin thành công!", "code": 200, "data": result}), 200
Example #6
0
    def student_not_teacher():
        result = list()
        students = StudentModel.find_student_not_teacher()

        for student in students:
            detai = ""
            if student.IDDeTai:
                project = ProjectModel.get_project_by_id(
                    project_id=int(student.IDDeTai))
                if project:
                    detai = project.Ten
            data = {
                "id": student.id,
                "masv": student.MaSV,
                "ten": student.Ten,
                "lop": "12312312",
                "hom_thu": "",
                "trang_thai":
                student.TrangThai if not student.IDDeTai else "DaChon",
                "gvhd": student.MaGVHD,
                "detai": detai,
                "cap": student.Cap
            }
            result.append(data)
        return jsonify({
            "message": "Tạo ghi chú thành công!",
            "data": result,
            "code": 200
        }), 200
Example #7
0
 def get_project_by_teacher():
     ma_gvhd = request.args.get("ma_gvhd")
     if not ma_gvhd:
         return jsonify({"messgae": "Không tìm thấy mã giáo viên!", "code": 413}), 413
     project_data_teachers = ProjectModel.get_project_by_one_teacher(ma_gvhd=ma_gvhd)
     result = list()
     for project_data_teacher in project_data_teachers:
         data = {
             "ten": project_data_teacher.Ten,
             "mota": project_data_teacher.MoTa,
             "trang_thai": project_data_teacher.Ten,
             "Ten": project_data_teacher.Ten,
         }
         result.append(data)
     if not result:
         return jsonify({"message": "Không tìm thấy đề tài của giáo viên", "code": 201}), 201
     return jsonify({"message": "Không tìm thấy đề tài của giáo viên", "data": result, "code": 200}), 200
Example #8
0
 def get_list_student_by_teacher(teacher_id):
     result = list()
     try:
         ma_gvhd = TeacherModel.get_magvhd_by_id(teacher_id)
     except:
         return jsonify({"messgae": "Không tìm thấy mã giáo viên!", "code": 413}), 413
     students = StudentModel.get_student_by_magvhd(magvhd=ma_gvhd)
     for student in students:
         project = None
         if student.IDDeTai:
             project = ProjectModel.get_project_by_id(student.IDDeTai)
         data = {
             "masv": student.MaSV,
             "ten": student.Ten,
             "id_sv": student.id,
             "detai": project.Ten if project else "",
             "ghichu": project.GhiChu if project else "",
             "cap": student.Cap
         }
         result.append(data)
     return jsonify({"messgae": "request thành công!", "data": result, "code": 200}), 200
Example #9
0
 def get_all_project():
     result = list()
     try:
         projects = ProjectModel.get_all_project()
     except Exception as e:
         print(e)
         return jsonify({
             "message": "Có lỗi phát sinh trong server!",
             "code": 500
         }), 500
     for project in projects:
         result.append({
             "id": project.id,
             "Ten": project.Ten,
             "Mota": project.MoTa,
             "TrangThai": project.TrangThai,
             "GhiChu": project.GhiChu
         })
     return jsonify({
         "message": "request thành công!",
         "data": result,
         "code": 200
     }), 200
 def __init__(self):
     self.tab = ProjectTab()
     self.model = ProjectModel()
     self.__addEventHandlers()
     self.__populateProjectList()
class ProjectTabController:
    def __init__(self):
        self.tab = ProjectTab()
        self.model = ProjectModel()
        self.__addEventHandlers()
        self.__populateProjectList()

    def __populateProjectList(self):
        for item in self.model.getProjectList():
            self.tab.projectList.addItem(item.name)

    def __addEventHandlers(self):
        self.tab.browsePath.clicked.connect(lambda: self.__fileBrowser())
        self.tab.searchBox.returnPressed.connect(lambda: self.__searchForItem())
        self.tab.searchButton.clicked.connect(lambda: self.__searchForItem())
        self.tab.addProjectButton.clicked.connect(lambda: self.__addProject())
        self.tab.projectList.itemSelectionChanged.connect(lambda: self.__updateUI())
        self.tab.saveButton.clicked.connect(lambda: self.__saveProject())
        self.tab.deleteButton.clicked.connect(lambda: self.__deleteProject())

    def __updateUI(self):
        selectedItem = self.model.getSelectedProject(self.__getCurrentIndex())
        self.tab.projectName.setText(selectedItem.name)
        self.tab.projectDescription.setText(selectedItem.description)
        self.tab.binPath.setText(selectedItem.binaryPath)
        if selectedItem.hasBinaryAttributes():
            self.tab.table.setItem(0, 1, QTableWidgetItem(selectedItem.binaryProperties['os']))
            self.tab.table.setItem(1, 1, QTableWidgetItem(selectedItem.binaryProperties['arch']))
            self.tab.table.setItem(2, 1, QTableWidgetItem(selectedItem.binaryProperties['machine']))
            self.tab.table.setItem(3, 1, QTableWidgetItem("Win PE"))
            self.tab.table.setItem(4, 1, QTableWidgetItem(selectedItem.binaryProperties['bits']))
            self.tab.table.setItem(5, 1, QTableWidgetItem("Language"))
            self.tab.table.setItem(6, 1, QTableWidgetItem(selectedItem.binaryProperties['canary']))
            self.tab.table.setItem(7, 1, QTableWidgetItem(selectedItem.binaryProperties['crypto']))
            self.tab.table.setItem(8, 1, QTableWidgetItem(selectedItem.binaryProperties['nx']))
            self.tab.table.setItem(9, 1, QTableWidgetItem(selectedItem.binaryProperties['pic']))
            self.tab.table.setItem(10, 1, QTableWidgetItem(selectedItem.binaryProperties['relocs']))
            self.tab.table.setItem(11, 1, QTableWidgetItem("Relor"))
            self.tab.table.setItem(12, 1, QTableWidgetItem(selectedItem.binaryProperties['stripped']))

    def __populateTable(self):
        selectedItem = self.model.getSelectedProject(self.__getCurrentIndex())


    def __fileBrowser(self):
        callback = QFileDialog.getOpenFileName()
        if callback:
            self.tab.binPath.setText(str(callback[0]))

    def __searchForItem(self):
        print("Search triggered")

    def __getCurrentIndex(self):
        i = self.tab.projectList.indexFromItem(self.tab.projectList.currentItem()).row()
        return i

    def __saveProject(self):
        selectedItem = self.model.getSelectedProject(self.__getCurrentIndex())
        selectedItem.name = self.tab.projectName.text()
        selectedItem.description = self.tab.projectDescription.toPlainText()
        selectedItem.binaryPath = self.tab.binPath.text()
        
        self.model.checkAttributes(self.__getCurrentIndex())
        self.__updateUI()

        index = self.__getCurrentIndex()

        self.tab.projectList.clear()
        self.__populateProjectList()

        self.tab.projectList.setCurrentRow(index)

    def __deleteProject(self):
        self.model.deleteProject(self.__getCurrentIndex())
        self.tab.projectList.clear()
        self.__populateProjectList()

    def __addProject(self):
        self.model.addProject()
        self.tab.projectList.clear()
        self.__populateProjectList()

    def getCurrentProject(self):
        return self.model.getSelectedProject(self.__getCurrentIndex())
 def setup_class(self):
     self.model = ProjectModel(FakeConnTool())
class TestProjectModel():
    @classmethod
    def setup_class(self):
        self.model = ProjectModel(FakeConnTool())

    @classmethod
    def get_project_by_pid(self, pid):
        pros, code = self.model.get_project_list()
        for pro in pros['projects']:
            if pro['id'] == pid:
                return pro

    @classmethod
    def get_pid_by_name(self, name):
        pros, code = self.model.get_project_list()
        pid = None
        for pro in pros['projects']:
            if pro['name'] == name:
                pid = pro['id']
                break
        return pid

    def test_constructor(self):
        assert self.model._db != None
        assert self.model._uid == constant.TEST_UID

    def test_get_project_list(self):
        res = self.model.get_project_list()
        expect = {
            'projects': [{
                'name': 'test_name3',
                'owner': {
                    'name': 'abc',
                    'email': '*****@*****.**',
                    'uid': self.model._uid
                },
                'collaborator': [],
                'repositories': {
                    'Github': [263537889]
                },
                'updated': '2021-01-02 08:19:51.374000+00:00',
                'id': 'bv10AHp87ZtD93pPFfYh'
            }, {
                'name': 'test_name2',
                'owner': {
                    'name': 'abc',
                    'email': '*****@*****.**',
                    'uid': self.model._uid
                },
                'collaborator': [],
                'repositories': {
                    'Github': [182191121]
                },
                'updated': '2021-01-02 08:19:19.987000+00:00',
                'id': 'hNR8NR81T98kPec31ryP'
            }, {
                'name': 'test_name',
                'owner': {
                    'name': 'abc',
                    'email': '*****@*****.**',
                    'uid': self.model._uid
                },
                'collaborator': [],
                'repositories': {
                    'Github': [324982851]
                },
                'updated': '2021-01-02 08:13:59.648000+00:00',
                'id': constant.TEST_PID1
            }, {
                'name': 'test_name_compare',
                'owner': {
                    'name': 'abc',
                    'email': '*****@*****.**',
                    'uid': self.model._uid
                },
                'collaborator': [],
                'repositories': {
                    'Github': [325248132]
                },
                'updated': '2021-01-03 07:50:42.647000+00:00',
                'id': 'testing_id_compare'
            }]
        }
        assert res == (expect, 200)

    def test_add_and_delete_project(self):
        self.model.add_project('test_add_project')
        pros, code = self.model.get_project_list()
        expect = None
        pid = None
        for pro in pros['projects']:
            if pro['name'] == 'test_add_project':
                expect = pro
                pid = pro['id']
        assert expect != None
        self.model.delete_project(self.get_pid_by_name('test_add_project'))

    def test_when_name_exist_then_add_project_should_400(self):
        self.model.add_project('test_add_repeat')
        pros, code = self.model.add_project('test_add_repeat')
        assert pros == None
        assert code == status_code.BAD_REQUEST
        self.model.delete_project(self.get_pid_by_name('test_add_repeat'))

    def test_is_project_name_used(self):
        assert self.model._ProjectModel__is_project_name_used(
            'test_repeat_name') == False
        self.model.add_project('test_repeat_name')
        assert self.model._ProjectModel__is_project_name_used(
            'test_repeat_name') == True
        self.model.delete_project(self.get_pid_by_name('test_repeat_name'))

    def test_delete_not_exist_project_should_404(self):
        data, code = self.model.delete_project('no_such_pid')
        assert data == None
        assert code == status_code.NOT_FOUND

    def test_is_project_owner(self):
        project1 = {
            'collaborator': [],
            'name': 'test',
            'owner': constant.TEST_UID,
            'repositories': {
                'Github': [21212121]
            },
            'updated': '2011-11-04 00:05:23.283000+00:00'
        }
        project2 = {
            'collaborator': [],
            'name': 'test',
            'owner': 'other_guy',
            'repositories': {
                'Github': [21212121]
            },
            'updated': '2011-11-04 00:05:23.283000+00:00'
        }
        assert self.model._ProjectModel__is_project_owner(
            project1, constant.TEST_UID) == True
        assert self.model._ProjectModel__is_project_owner(
            project2, constant.TEST_UID) == False

    def test_update_name(self):
        self.model.add_project('test_update_name')
        pros, code = self.model.get_project_list()
        pid = None
        for pro in pros['projects']:
            if pro['name'] == 'test_update_name':
                expect = pro
                pid = pro['id']
        data, code = self.model.update_name(pid, 'updated')
        update_pro = self.model._db.collection('projects').document(
            pid).get().to_dict()
        assert update_pro['name'] == 'updated'
        self.model.delete_project(self.get_pid_by_name('test_update_name'))
        self.model.delete_project(self.get_pid_by_name('updated'))

    def test_update_name_no_name_parameter(self):
        self.model.add_project('test_update_name_no_name')
        pros, code = self.model.get_project_list()
        pid = None
        for pro in pros['projects']:
            if pro['name'] == 'test_update_name_no_name':
                expect = pro
                pid = pro['id']
        data, code = self.model.update_name(pid, '')
        assert data == 'name is require'
        assert code == status_code.BAD_REQUEST
        self.model.delete_project(
            self.get_pid_by_name('test_update_name_no_name'))

    def test_update_name_no_such_pid(self):
        self.model.add_project('test_update_name_wrong_pid')
        data, code = self.model.update_name('wrong_pid', 'updated')
        assert data == None
        assert code == status_code.NOT_FOUND
        self.model.delete_project(
            self.get_pid_by_name('test_update_name_wrong_pid'))

    def test_update_collaborator(self):
        self.model.add_project('test_update_collaborator')

        pid = self.get_pid_by_name('test_update_collaborator')
        data, code = self.model.update_collaborator(pid,
                                                    '*****@*****.**',
                                                    'add')
        update_pro = self.model._db.collection('projects').document(
            pid).get().to_dict()
        userModel = UserModel(FakeConnTool())
        print(update_pro['collaborator'])
        assert update_pro['collaborator'] == [
            userModel.get_user_info_by_email('*****@*****.**')[0]['uid']
        ]
        self.model.delete_project(
            self.get_pid_by_name('test_update_collaborator'))

    def test_remove_collaborator(self):
        self.model.add_project('test_update_collaborator')
        pros, code = self.model.get_project_list()
        pid = None
        for pro in pros['projects']:
            if pro['name'] == 'test_update_collaborator':
                expect = pro
                pid = pro['id']
        _, _ = self.model.update_collaborator(pid, '*****@*****.**',
                                              'add')
        data, code = self.model.update_collaborator(pid,
                                                    '*****@*****.**',
                                                    'remove')

        assert ('移除成功!', status_code.OK) == (data['msg'], code)
        self.model.delete_project(
            self.get_pid_by_name('test_update_collaborator'))

    def test_add_repo(self):
        data = {'repositories': {'action': 'update', 'Github': [182191121]}}
        self.model.add_project('test_add_repo')
        pid = self.get_pid_by_name('test_add_repo')

        self.model.update_repos(pid, data)
        data, code = self.model.get_project_repos(pid)
        assert ([182191121], status_code.OK) == ([data['repos'][0]['id']],
                                                 code)
        self.model.delete_project(self.get_pid_by_name('test_add_repo'))

    def test_remove_repo(self):
        data = {'repositories': {'action': 'remove', 'Github': [182191121]}}
        self.model.add_project('test_remove_repo')
        pid = self.get_pid_by_name('test_remove_repo')

        self.model.update_repos(pid, data)
        data, code = self.model.get_project_repos(pid)
        assert ([], status_code.OK) == (data['repos'], code)
        self.model.delete_project(self.get_pid_by_name('test_remove_repo'))

    def test_update_repo_with_erro_pid(self):
        data = {'repositories': {'action': 'update', 'Github': [182191121]}}
        self.model.add_project('test_add_repo')
        pid = self.get_pid_by_name('test_add_repo')

        self.model.update_repos(pid, data)
        data, code = self.model.get_project_repos(pid)
        assert ([182191121], status_code.OK) == ([data['repos'][0]['id']],
                                                 code)
        self.model.delete_project(self.get_pid_by_name('test_add_repo'))

    def test_get_project_setting(self):
        data = {'repositories': {'action': 'remove', 'Github': [182191121]}}
        self.model.add_project('test_get_project_setting')
        pid = self.get_pid_by_name('test_get_project_setting')

        data, code = self.model.get_project_setting(pid)
        setting = Setting('test_get_project_setting', [],
                          UserModel(FakeConnTool())).to_dict()
        assert (setting, status_code.OK) == (data, code)
        self.model.delete_project(self.get_pid_by_name('test_remove_repo'))
Example #14
0
    def get_list_student():
        result = list()
        param = request.args

        ten = param.get("ten")
        ma_sv = param.get("masv")
        lop = param.get("lop")
        trang_thai = param.get("trang_thai")
        gvhd = param.get("gvhd")
        page = param.get("page", 1)
        per_page = param.get("per_page", 10)

        where = ""

        if ten:
            if not where:
                where = "( StudentModel.Ten.contains(ten) )"
            else:
                where += " & ( StudentModel.Ten.contains(ten) )"

        if ma_sv:
            if not where:
                where = "( StudentModel.MaSV.contains(ma_sv) )"
            else:
                where += " & ( StudentModel.MaSV.contains(ma_sv) )"

        if gvhd:
            if not where:
                where = "( StudentModel.MaGVHD.contains(gvhd) )"
            else:
                where += " & ( StudentModel.MaGVHD.contains(gvhd) )"
        result = list()
        paging = dict()
        if where:
            where = eval(where)

        tong = StudentModel.count_student_by_where(where)
        if tong == 0:
            return jsonify({
                "messgae": "request thành công!",
                "data": result,
                "code": 200
            }), 200
        if page == -1:
            students = StudentModel.get_all_student(where=where, is_full=True)
        else:
            paging = StudentController.generate_paging(page=page,
                                                       per_page=per_page,
                                                       sum_page=tong)
            skip = per_page * (page - 1)
            limit = per_page
            students = StudentModel.get_all_student(where=where,
                                                    skip=skip,
                                                    limit=limit)

        for student in students:
            detai = ""
            if student.IDDeTai:
                project = ProjectModel.get_project_by_id(
                    project_id=int(student.IDDeTai))
                if project:
                    detai = project.Ten
            data = {
                "id": student.id,
                "masv": student.MaSV,
                "ten": student.Ten,
                "lop": "12312312",
                "hom_thu": "",
                "trang_thai":
                student.TrangThai if not student.IDDeTai else "DaChon",
                "gvhd": student.MaGVHD,
                "detai": detai,
                "cap": student.Cap
            }
            result.append(data)
        return jsonify({
            "message": "Tạo ghi chú thành công!",
            "data": result,
            "paging": paging,
            "code": 200
        }), 200
class ProjectController:
    def __init__(self):
        self.model = ProjectModel()
        self.projectSelection = ProjectSelection()
        self.newProjectDialog = NewProjectDialog()
        self.project = None
        self.__addEventHandlers()
        self.__populateProjectList()

    def __populateProjectList(self):
        self.projectSelection.projectsList.clear()
        projects = self.model.getProjectList()
        for key in projects.keys():
            i = QListWidgetItem(key)
            j = ProjectWidget(projects[key])
            i.setSizeHint(j.sizeHint())
            self.projectSelection.projectsList.addItem(i)
            self.projectSelection.projectsList.setItemWidget(i, j)

    def __addEventHandlers(self):
        self.newProjectDialog.createButton.clicked.connect(
            lambda: self.__saveProject())
        self.projectSelection.deleteProject.clicked.connect(
            lambda: self.__deleteProject())
        self.projectSelection.addProject.clicked.connect(
            lambda: self.__addProject())
        self.projectSelection.openProject.clicked.connect(
            lambda: self.__openProject())

    def __projectProperties(self):
        self.project = self.newProjectDialog.newItem
        self.newProjectDialog.binPath.setText(self.project.binaryPath)
        self.newProjectDialog.table.setItem(
            0, 1, QTableWidgetItem(self.project.binaryProperties['os']))
        self.newProjectDialog.table.setItem(
            1, 1, QTableWidgetItem(self.project.binaryProperties['arch']))
        self.newProjectDialog.table.setItem(
            2, 1, QTableWidgetItem(self.project.binaryProperties['machine']))
        self.newProjectDialog.table.setItem(
            3, 1, QTableWidgetItem(self.project.binaryProperties['class']))
        self.newProjectDialog.table.setItem(
            4, 1, QTableWidgetItem(self.project.binaryProperties['bits']))
        self.newProjectDialog.table.setItem(
            5, 1, QTableWidgetItem(self.project.binaryProperties['lang']))
        self.newProjectDialog.table.setItem(
            6, 1, QTableWidgetItem(self.project.binaryProperties['canary']))
        self.newProjectDialog.table.setItem(
            7, 1, QTableWidgetItem(self.project.binaryProperties['crypto']))
        self.newProjectDialog.table.setItem(
            8, 1, QTableWidgetItem(self.project.binaryProperties['nx']))
        self.newProjectDialog.table.setItem(
            9, 1, QTableWidgetItem(self.project.binaryProperties['pic']))
        self.newProjectDialog.table.setItem(
            10, 1, QTableWidgetItem(self.project.binaryProperties['relocs']))
        self.newProjectDialog.table.setItem(
            11, 1, QTableWidgetItem(self.project.binaryProperties['relro']))
        self.newProjectDialog.table.setItem(
            12, 1, QTableWidgetItem(self.project.binaryProperties['stripped']))

    def __fileBrowser(self):
        callback = QFileDialog.getOpenFileName()
        if callback:
            self.newProjectDialog.binPath.setText(str(callback[0]))

    def __searchForItem(self):
        searchText = self.tab.searchBox.text().lower()
        # When search is triggered with an empty string clear the list
        if searchText is "":
            self.tab.projectList.clear()
            self.__populateProjectList()
        else:
            # get all the items with substring of searched string
            searches = []
            for projectName in self.model.getProjectList().keys():
                if searchText in projectName.lower():
                    searches.append(projectName)
            # add those items with substring into the list
            self.tab.projectList.clear()
            for s in searches:
                self.tab.projectList.addItem(s)

    def __getCurrentIndex(self):
        try:
            return self.projectSelection.projectsList.currentItem().text()
        except AttributeError:
            return self.project.name

    def __saveProject(self):
        if self.newProjectDialog.projectName.text():
            self.newProjectDialog.newItem.name = self.newProjectDialog.projectName.text(
            )
            self.project = self.model.saveProject(
                self.newProjectDialog.newItem)
            self.__populateProjectList()
            self.__clear()
            self.newProjectDialog.close()

    def __deleteProject(self):
        if not self.projectSelection.projectsList.selectedItems():
            return
        buttonReply = QMessageBox.question(
            self.projectSelection, 'Delete Project',
            "Are you sure you want to delete this project?",
            QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        if buttonReply == QMessageBox.Yes:
            self.model.deleteProject(self.__getCurrentIndex())
            self.projectSelection.projectsList.clear()
            self.__populateProjectList()

    def __addProject(self):
        path, response = QFileDialog.getOpenFileName(self.projectSelection)
        try:
            if response:
                self.newProjectDialog.newItem = self.model.verifyBinary(path)
                self.__projectProperties()
                self.newProjectDialog.exec_()
                self.__openProject()
        except TypeError:
            errorDialog = QtWidgets.QMessageBox()
            errorDialog.setText('Unsupported File')
            errorDialog.setWindowTitle("Error")
            errorDialog.setInformativeText(
                "The selected file is not ELF x86 or PE x86")
            errorDialog.setIcon(3)
            errorDialog.exec_()

    def getCurrentProject(self):
        return self.project

    def __openProject(self):
        if self.projectSelection.projectsList.selectedItems():
            self.project = self.model.getSelectedProject(
                self.__getCurrentIndex())
            self.projectSelection.close()
        else:
            self.project = None

    def __clear(self):
        self.newProjectDialog.projectName.clear()
        self.newProjectDialog.binPath.clear()
        for i in range(12):
            self.newProjectDialog.table.setItem(i, 1, QTableWidgetItem(''))