Commit 3db66ef3 authored by Barbora Kompišová's avatar Barbora Kompišová
Browse files

user tests extended

parent 7d7bdc3a
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ from storage import Storage


db = SQLAlchemy()
app = Flask('portal')

# TODO - urgent
storage = Storage({
    "submissions_dir": "todo",
@@ -27,6 +27,7 @@ def config_app(flask_app):


def create_app():
    app = Flask('portal')
    # app configuration
    config_app(app)
    # database bind to app
@@ -35,5 +36,7 @@ def create_app():
    return app


# app = create_app()

import portal.database.models
+1 −1
Original line number Diff line number Diff line
@@ -303,7 +303,7 @@ class SubmissionState(enum.Enum):
class Submission(db.Model, EntityBase):
    __tablename__ = 'submission'
    id = db.Column(db.Text(length=36), default=lambda: str(uuid.uuid4()), primary_key=True)
    processing_scheduled_for = db.Column(db.TIMESTAMP(timezone=True))
    scheduled_for = db.Column(db.TIMESTAMP(timezone=True))
    parameters = db.Column(db.Text, nullable=False)
    state = db.Column(db.Enum(SubmissionState, name='SubmissionState'), nullable=False)
    note = db.Column(db.Text)
+26 −17
Original line number Diff line number Diff line
@@ -2,31 +2,31 @@ from flask import Blueprint, request
from flask_restful import Api, Resource, abort
from marshmallow import ValidationError

from portal.rest import UserSchema
from portal.service.service import delete_entity, write_entity, find_user
from portal.rest import UserSchema, SubmissionSchema
from portal.service import service
from portal.database.models import User
from portal.tools.logging import log
from portal.tools.decorators import error_handler

users = Blueprint('users', __name__, url_prefix='/users')
users_api = Api(users)

user_schema = UserSchema()
users_schema = UserSchema(many=True, only=('id', 'username', 'uco', 'email'))
submissions_schema = SubmissionSchema(many=True, only=('id', 'state', 'project', 'scheduled_for'))


class UserResource(Resource):
    @error_handler
    def get(self, uid):
        log.info(f"GET to {request.url}")
        user = find_user(uid)
        if not user:
            abort(404, message=f"Could not find user {uid}.")
        return user_schema.dump(user)
        user = service.find_user(uid)
        return user_schema.dump(user)[0], 200

    @error_handler
    def put(self, uid):
        log.info(f"PUT to {request.url}")
        user = find_user(uid)
        if not user:
            abort(404, message=f"Could not find user {uid}.")
        user = service.find_user(uid)

        json_data = request.get_json()
        if not json_data:
@@ -43,25 +43,26 @@ class UserResource(Resource):
        user.username = data['username']
        user.is_admin = data['is_admin']
        # TODO all; care for password
        write_entity(user)
        service.write_entity(user)
        log.debug(f"Updated user {uid} to {user}.")
        return '', 204

    @error_handler
    def delete(self, uid):
        log.info(f"DELETE to {request.url}")
        user = find_user(uid)
        if not user:
            abort(404, message=f"Could not find user {uid}.")
        delete_entity(user)
        user = service.find_user(uid)
        service.delete_entity(user)
        return '', 204


class UserList(Resource):
    @error_handler
    def get(self):
        log.info(f"GET to {request.url}")
        users = User.query.all()
        return users_schema.dump(users)
        return users_schema.dump(users)[0], 200

    @error_handler
    def post(self):
        log.info(f"POST to {request.url}")
        json_data = request.get_json()
@@ -75,11 +76,19 @@ class UserList(Resource):

        admin = data.get('is_admin') or False
        new_user = User(uco=data['uco'], email=data['email'], username=data['username'], is_admin=admin)
        write_entity(new_user)
        service.write_entity(new_user)
        log.debug(f"Created user={User}")
        return user_schema.dump(new_user)[0], 201


class UserSubmissionList(Resource):
    def get(self, uid):
        log.info(f"PUT to {request.url}")
        user = service.find_user(uid)
        return submissions_schema.dump(user.submissions)[0], 200


users_api.add_resource(UserResource, '/<string:uid>')
users_api.add_resource(UserList, '/')
users_api.add_resource(UserSubmissionList, '/<string:uid>/submissions')
+3 −2
Original line number Diff line number Diff line
@@ -16,9 +16,10 @@ def error_handler(func):
    """
    @wraps(func)
    def _func(*args, **kwargs):
        log.debug(f"[{func.__name__.upcase()}] {args}; {kwargs}")
        log.debug(f"[{func.__name__.upper()}] {args}; {kwargs}")
        try:
            func(*args, **kwargs)
            return func(*args, **kwargs)

        except PortalAPIError as ex:
            abort(ex.code, **ex.message)

+3 −2
Original line number Diff line number Diff line
@@ -43,8 +43,9 @@ def create_groups(db):


def create_submissions(db):
    # db.session.add(Submission(user=User.query.filter_by(username="xfoo").first(),
    #                          project=Project.query.filter_by(name="p1"), parameters=""))
    user = User.query.filter_by(username="xfoo").first()
    db.session.add(Submission(user=user,
                              project=Project.query.filter_by(name="p1").first(), parameters=""))
    db.session.commit()


Loading