def test_bson_object_id_converter(self): converter = BSONObjectIdConverter("/") self.assertRaises(NotFound, converter.to_python, ("132")) assert converter.to_python("4e4ac5cfffc84958fa1f45fb") == \ ObjectId("4e4ac5cfffc84958fa1f45fb") assert converter.to_url(ObjectId("4e4ac5cfffc84958fa1f45fb")) == \ "4e4ac5cfffc84958fa1f45fb"
def set_group(self, data): """Assign a group to each student Parameters ---------- groupsamount : str Number of groups Return ------ dict error, error message and the list of grades """ error = False error_message = [] gradeList = self.users.distinct("grade") gradeList.remove('ADMIN') max_group = int(data["groupsAmount"]) groupNumber = 1 bson = BSONObjectIdConverter(BaseConverter) for element in gradeList: userCursor = list(self.users.find({'grade': element})) userList = [] for document in userCursor: document['_id'] = str(document['_id']) userList.append(document) random.shuffle(userList) for user in userList: if groupNumber > max_group: groupNumber = 1 self.users.find_one_and_update({ '_id': bson.to_python(user['_id'])}, { '$set': {'group': groupNumber}}, return_document=ReturnDocument.AFTER) self.groups.update({ 'number': groupNumber}, { '$push': {'student': user}}) else: self.users.find_one_and_update({ '_id': bson.to_python(user['_id'])}, { '$set': {'group': groupNumber}}, return_document=ReturnDocument.AFTER) self.groups.update({ 'number': groupNumber}, { '$push': {'student': user}}) groupNumber += 1 return { 'error': error, 'errorMessage': error_message, 'gradeList': gradeList }
def update_password(self, inputs, user): """Update the password of a user Parameters ---------- inputs : dict Curent password and the new one (and confirmation) user : dict The current user Returns ------- dict error, error message and updated user """ error = False error_message = '' updated_user = user # check if new passwords are identicals password_identical = (inputs['newPassword'] == inputs['confPassword']) if not inputs["newPassword"] == '': if password_identical: # Try to authenticate the user with his old password credentials = { 'login': user['username'], 'password': inputs['oldPassword']} authentication = self.authenticate_user(credentials) if not authentication['error']: # Update the password password = self.app.bcrypt.generate_password_hash( inputs['newPassword']).decode('utf-8') bson = BSONObjectIdConverter(BaseConverter) updated_user = self.users.find_one_and_update({ '_id': bson.to_python(user['_id'])}, { '$set': { 'password': password }}, return_document=ReturnDocument.AFTER) else: error = True error_message = 'Incorrect old password' else: error = True error_message = 'New passwords are not identical' else: error = True error_message = 'Empty password' return { 'error': error, 'error_message': error_message, 'user': updated_user}
def delete_account(): """ Delete the user account and logs him out Returns ------- json user : empty dictionnary logged: False """ users = ca.mongo.db.users bson = BSONObjectIdConverter(BaseConverter) users.find_one_and_delete({'_id': bson.to_python(session['user']['_id'])}) session.pop('user', None) ca.logger.debug(session) return {'user': {}, 'logged': False}
def __init__(self, config="config/genocrowd.test.ini"): """Summary Parameters ---------- config : str, optional Description """ # Config self.config = config # create app self.app = create_app(config=self.config) # context self.ctx = self.app.app_context() self.ctx.push() # Client self.client = self.app.test_client() self.session = {} # bson self.bson = BSONObjectIdConverter(BaseConverter) self.reset_db()
def file_info(id): id, _ = path.splitext(id) id = BSONObjectIdConverter({}).to_python(id) try: file = GridFS(mongo.db).get(id) except NoFile: raise NotFound() return json_response(file=FileSchema().dump(file))
def download_file(id): """下载文件内容,让浏览器打开一个保存窗口来保存文件 """ id, _ = path.splitext(id) id = BSONObjectIdConverter({}).to_python(id) return file_response(id, True)
def view_file(id): """浏览文件内容,在浏览器里直接展示文件内容,比如图片 """ id, _ = path.splitext(id) id = BSONObjectIdConverter({}).to_python(id) return file_response(id)
def update_profile(self, data, user): """Update the profile of a user Parameters ---------- inputs : dict fields to update user : dict The current user Returns ------- dict error, error message and updated user """ error = False error_message = [] username = data['newUsername'] email = data['newEmail'] if len(username) == 0: assert username != user['username'] username = user['username'] if len(email) == 0: email = user['email'] bson = BSONObjectIdConverter(BaseConverter) updated_user = self.users.find_one_and_update({ '_id': bson.to_python(user['_id'])}, { '$set': { 'username': username, 'email': email }}, return_document=ReturnDocument.AFTER) assert updated_user['username'] == username return { 'error': error, 'errorMessage': error_message, 'user': updated_user }
def download_file(id): id, _ = path.splitext(id) id = BSONObjectIdConverter({}).to_python(id) return file_response(id, True)
def view_file(file_id): id, _ = path.splitext(file_id) id = BSONObjectIdConverter({}).to_python(id) return file_response(id)