Ejemplo n.º 1
0
    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"
Ejemplo n.º 2
0
    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"
Ejemplo n.º 3
0
    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
        }
Ejemplo n.º 4
0
    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}
Ejemplo n.º 5
0
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}
Ejemplo n.º 6
0
    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()
Ejemplo n.º 7
0
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))
Ejemplo n.º 8
0
def download_file(id):
    """下载文件内容,让浏览器打开一个保存窗口来保存文件
    """

    id, _ = path.splitext(id)
    id = BSONObjectIdConverter({}).to_python(id)

    return file_response(id, True)
Ejemplo n.º 9
0
def view_file(id):
    """浏览文件内容,在浏览器里直接展示文件内容,比如图片
    """

    id, _ = path.splitext(id)
    id = BSONObjectIdConverter({}).to_python(id)

    return file_response(id)
Ejemplo n.º 10
0
    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
        }
Ejemplo n.º 11
0
def download_file(id):
    id, _ = path.splitext(id)
    id = BSONObjectIdConverter({}).to_python(id)
    return file_response(id, True)
Ejemplo n.º 12
0
def view_file(file_id):
    id, _ = path.splitext(file_id)
    id = BSONObjectIdConverter({}).to_python(id)

    return file_response(id)