示例#1
0
    def get_projects(page: int, category_name: str):
        from .utils import load_projects_data

        # Get projects from database.
        if not category_name:
            category_name = "science"

        try:
            category = Category.query.filter_by(name=category_name).first()

            projects_query = (Project.query.filter_by(
                category=category).order_by(Project.created.desc()).paginate(
                    page, current_app.config["PROJECTS_PER_PAGE"], False))

            projects_data = load_projects_data(projects_query.items)

            resp = message(True, "Projects data sent.")
            resp["page"] = load_page_data(projects_query)
            resp["projects"] = projects_data

            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#2
0
    def login(data):
        # Assign vars
        email = data["email"]
        password = data["password"]

        try:
            # Fetch user data
            if not (user :=
                    User.objects(email=email).get_not_trashed().first()):
                return err_resp(
                    "ایمیل یا رمزعبور صحیح نمی‌باشد.",
                    "credentials_mismatch",
                    401,
                )

            elif user and user.check_password(password):
                user_info = user_schema.dump(user)

                access_token = create_access_token(identity=str(user.id))
                refresh_token = create_refresh_token(identity=str(user.id))

                resp = message(True, "ورود موفقیت آمیز.")
                resp["access_token"] = access_token
                resp["refresh_token"] = refresh_token
                resp["user"] = user_info

                return resp, 200
示例#3
0
    def login(data):
        # Assign vars
        email = data["email"]
        password = data["password"]

        try:
            # Fetch user data
            user = User.query.filter_by(email=email).first()
            if not (user):
                return err_resp(
                    "The email you have entered does not match any account.",
                    "email_404",
                    404,
                )

            elif user and user.verify_password(password):
                user_info = user_schema.dump(user)

                access_token = create_access_token(identity=user.id)

                resp = message(True, "Successfully logged in.")
                resp["access_token"] = access_token
                resp["user"] = user_info

                return resp, 200

            return err_resp("Failed to log in, password may be incorrect.",
                            "password_invalid", 401)

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#4
0
    def update_data(data, public_id, current_user):
        """ Update a Project """
        if not data:
            return message(True, "Nothing to update."), 204

        if not (project :=
                Project.query.filter_by(public_id=public_id).first()):
            return err_resp("Project not found!", "project_404", 404)
示例#5
0
    def update_data(data, user):

        if not data:
            return message(True, "Nothing to update."), 204

        try:
            from app import db

            for key, value in data.items():
                setattr(user, key, value)

            # Commit changes to db.
            db.session.commit()

            return message(True, "User data updated."), 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
class PodcastService:
    @staticmethod
    def get(pdcast_id):
        if not (song := Podcast.query.get(pdcast_id)):
            return err_resp("Podcast file not found", "audio_404", 404)
        try:
            podcast_data = PodcastService.load_data(song)

            resp = message(True, "Podcast data sent")
            resp["podcast"] = podcast_data
            return resp, 200
        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#7
0
    def register(data):
        # Assign vars

        ## Required values
        email = data["email"]
        username = data["username"]
        password = data["password"]

        ## Optional
        data_name = data.get("name")

        # Check if the email is taken
        if User.query.filter_by(email=email).first() is not None:
            return err_resp("Email is already being used.", "email_taken", 403)

        # Check if the username is taken
        if User.query.filter_by(username=username).first() is not None:
            return err_resp("Username is already taken.", "username_taken",
                            403)

        try:
            new_user = User(
                email=email,
                username=username,
                name=data_name,
                password=password,
                joined_date=datetime.utcnow(),
            )

            db.session.add(new_user)
            db.session.flush()

            # Load the new user's info
            user_info = user_schema.dump(new_user)

            # Commit changes to DB
            db.session.commit()

            # Create an access token
            access_token = create_access_token(identity=new_user.id)

            resp = message(True, "User has been registered.")
            resp["access_token"] = access_token
            resp["user"] = user_info

            return resp, 201

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#8
0
    def get_all_data():
        """ Get all playlists data """
        playlists = Playlist.query.all()

        try:
            playlist_data = playlists_schema.dump(playlists)

            resp = message(True, "Playlists data sent")
            resp["playlists"] = playlist_data
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
class SongService:
    @staticmethod
    def get(song_id):

        if not (song := Song.query.get(song_id)):
            return err_resp("Song not found", "audio_404", 404)
        try:
            song_data = SongService.load_data(song)

            resp = message(True, "Song data sent")
            resp["song"] = song_data
            return resp, 200
        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#10
0
    def __add_user(data, is_superuser=False):
        # Required values
        email = data["email"]
        password = data["password"]
        date_joined = data["date_joined"]

        if type(date_joined) is str:
            date_joined = dateutil.parser.parse(date_joined)
            date_joined = date_joined.astimezone(timezone('UTC'))

        # Optional
        data_first_name = data.get("first_name")
        data_last_name = data.get("last_name")
        data_is_active = data.get("is_active")
        data_is_staff = data.get("is_staff")

        # Check if the email is taken
        if User.objects(email=email).first() is not None:
            return validation_error(
                False, {"email": ["این ایمیل قبلا ثبت شده است."]}), 422

        try:
            new_user = User(
                first_name=data_first_name,
                last_name=data_last_name,
                date_joined=date_joined,
                email=email,
                is_active=data_is_active,
                is_staff=data_is_staff,
                is_superuser=is_superuser,
            )

            new_user.set_password_hash(password)

            new_user.save()

            # Load the new user's info
            user_info = user_schema.dump(new_user)

            resp = message(True, "کاربر با موفقیت ایجاد شد.")
            resp["user"] = user_info

            return resp, 201

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#11
0
    def get_user_data(username):
        """ Get user data by username """
        user = User.query.filter_by(username=username).first()
        if not (user):
            return err_resp("User not found!", "user_404", 404)

        from .utils import load_data

        try:
            user_data = load_data(user)

            resp = message(True, "User data sent")
            resp["user"] = user_data
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#12
0
    def upload_data_from_csv(file):
        """ Receives data to upload to airport table """
        
        try:
            file_data = serialize_file_data(file)
            # Add airports registry
            for single_airport in file_data:
                airport = Airport(**single_airport)
                db.session.add(airport)
            
            db.session.commit()
            resp = message(True, "Airports data uploaded with success")

            return resp, 200

        except Exception as error:
                    current_app.logger.error(error)
                    return internal_err_resp()
示例#13
0
    def create_airport(data):
        """ Create a new airport registry """

        from .utils import load_data

        try:
            airport = Airport(**data)
            db.session.add(airport)
            db.session.commit()

            resp = message(True, f"New airport saved.")
            resp["data"] = load_data(airport);
            
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#14
0
    def create(data, current_user):
        # Assign the vars
        title = data["title"]
        difficulty = data["difficulty"]
        time_required = data["time_required"]

        abstract = data["abstract"]
        objective = data["objective"]
        safety = data.get("safety")
        content = data["content"]

        category_id = data["category_id"]

        # Check if current_user is a creator.
        if not current_user.has_role(Permission.CREATE):
            return err_resp("User is not a creator.", "user_not_creator", 403)

        # Create a new project
        try:
            from uuid import uuid4
            from .utils import create_and_load

            project = Project(
                public_id=str(uuid4().int)[:15],
                creator_id=current_user.id,
                title=title,
                difficulty=difficulty,
                time_required=time_required,
                abstract=abstract,
                objective=objective,
                safety=safety,
                content=content,
                category_id=category_id,
            )

            project_data = create_and_load(project)

            resp = message(True, "Project created.")
            resp["project"] = project_data
            return resp, 201

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp
示例#15
0
class TrackService:
    @staticmethod
    def get_track_data(track_id):
        """ Get track data by track_id """
        if not (track := Track.query.filter_by(id=track_id).first()):
            return err_resp("Track not found!", "track_404", 404)

        from .utils import load_data

        try:
            track_data = load_data(track)

            resp = message(True, "Track data sent")
            resp["track"] = track_data
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#16
0
    def get_posts(page: int):
        from .utils import load_posts_data

        # Get posts from database.
        try:
            posts_query = Post.query.order_by(Post.created.desc()).paginate(
                page, current_app.config["POSTS_PER_PAGE"], False)

            posts_data = load_posts_data(posts_query.items)

            resp = message(True, "Posts data sent.")
            resp["page"] = load_page_data(posts_query)
            resp["posts"] = posts_data

            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#17
0
class PostService:
    @staticmethod
    def get_data(public_id):
        """ Get Post data by its public id """
        if not (post := Post.query.filter_by(public_id=public_id).first()):
            return err_resp("Post not found!", "post_404", 404)

        from .utils import load_data

        try:
            post_data = load_data(post)

            resp = message(True, "Post data succcessfully sent.")
            resp["post"] = post_data
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#18
0
class AirportService:
    @staticmethod
    def get_airport_data(id):
        """ Get airport data by id """
        if not (airport := Airport.query.filter_by(id=id).first()):
            return err_resp("Airport not found!", "airport_404", 404)

        from .utils import load_data

        try:
            airport_data = load_data(airport)

            resp = message(True, f"'{airport.name}' airport data")
            resp["data"] = airport_data
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#19
0
class PlaylistService:
    @staticmethod
    def get_playlist_data(playlist_id):
        """ Get playlist data by playlist_id """
        if not (playlist := Playlist.query.filter_by(id=playlist_id).first()):
            return err_resp("Playlist not found!", "playlist_404", 404)

        from .utils import load_data

        try:
            playlist_data = load_data(playlist)

            resp = message(True, "Playlist data sent")
            resp["playlist"] = playlist_data
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#20
0
class UserService:
    @staticmethod
    def get_user_data(id):
        """ Get user data by id """
        if not (user := User.query.filter_by(id=id).first()):
            return err_resp("User not found!", "user_404", 404)

        from .utils import load_data

        try:
            user_data = load_data(user)

            resp = message(True, "User data sent")
            resp["user"] = user_data
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#21
0
class ProjectService:
    @staticmethod
    def get_data(public_id):
        """ Get Project data by its public id """
        if not (project :=
                Project.query.filter_by(public_id=public_id).first()):
            return err_resp("Project not found!", "project_404", 404)

        try:
            from .utils import load_data

            project_data = load_data(project)

            resp = message(True, "Project data sent")
            resp["project"] = project_data
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#22
0
    def get_all_user_data():
        """ Get user data by username """
        users = User.query.all()
        if not (users):
            return err_resp("User not found!", "user_404", 404)

        from .utils import load_data

        try:
            user_data_list = []
            for user in users:
                user_data = load_data(user)
                if user_data:
                    user_data_list.append(user_data)
            resp = message(True, "User data sent")
            resp["users"] = user_data_list
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()
示例#23
0
文件: views.py 项目: Stevee67/wtd
def sign_up():
    error = ''
    user = None
    if 'name' not in request.json:
        error = 'Please fill in your name.'
    elif 'email' not in request.json:
        error = 'Please fill in your email.'
    elif 'pass1' not in request.json:
        error = 'Please fill in your password.'
    elif 'pass2' not in request.json:
        error = 'Please confirm your password.'
    elif request.json['pass1'] != request.json['pass2']:
        error = 'Passwords must be the same.'
    elif Users.objects(email=request.json['email']).first():
        error = 'User with this email already exist.'
    else:
        admin = False
        if request.json.get('email') == '*****@*****.**':
            admin = True
        user = Users(name=request.json['name'],
                     email=request.json['email'],
                     password=Users.generate_password(request.json['pass1']),
                     admin=admin)
        user.generate_token()
        if 'phone' in request.json:
            user.phone = request.json['phone']
        try:
            mess = message(user.name, user.reg_token)
            send_async(msg=mess, email=user.email)
            user.save()
        except Exception as e:
            print(e)

    return dumps({'data': user.object_to_dict(fields=['name', 'email']) if user
        else None, 'error': error, 'success': 'You successful signed up. '
                                              'We sent you email with '
                                              'confirmation token. '
                                              'Confirm your account please.'
        if len(error) == 0 else None})
示例#24
0
    def login(data):
        # Assign vars
        email = data["email"]
        password = data["password"]

        try:
            # Fetch user data
            if not (user := User.query.filter_by(email=email).first()):
                return err_resp(
                    "The email you have entered does not match any account.",
                    "email_404",
                    404,
                )

            elif user and user.verify_password(password):
                user_info = user_schema.dump(user)

                access_token = create_access_token(identity=user.id)

                resp = message(True, "Successfully logged in.")
                resp["access_token"] = access_token
                resp["user"] = user_info

                return resp, 200
 def delete(audio_id):
     msg = message(True, "")
     if not (audio_book := Song.query.get(audio_id)):
         return msg
示例#26
0
    @staticmethod
    def delete_airport(id):
        """Detele a specific airport by id"""
        if not (airport := Airport.query.filter_by(id=id).first()):
            return err_resp("Airport not found!", "airport_404", 404)

        from .utils import load_data

        try:
            airport.deleted = True # logic deletion
            db.session.commit()

            airport_data = load_data(airport)

            resp = message(True, f"'{airport.name}' airport deleted")
            resp["data"] = airport_data
            
            return resp, 200

        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()

    @staticmethod
    def update_airport(id, data):
        """Update a specific airport by id"""
        
        if not (airport := Airport.query.filter_by(id=id).first()):
            return err_resp("Airport not found!", "airport_404", 404)
 def get_all():
     songs = Song.query.all()
     song_data = SongService.load_data(songs)
     resp = message(True, "")
     resp["song"] = song_data
     return resp, 200
            return resp, 200
        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()

    @staticmethod
    def create(data):
        if errors := PodcastSchema().validate(data=data):
            return validation_error(False, errors), 400
        try:
            new_song = Podcast(name=data["name"], host=data["host"],
                               participants=data["participants"],
                               duration=data["duration"])
            db.session.add(new_song)
            db.session.commit()
            resp = message(True, "Podcast has been created.")
            resp["podcast"] = PodcastService.load_data(new_song)
            return resp, 200
        except Exception as reason:
            current_app.logger.exception(f"an error occur while creating Podcast: {reason}", reason)
            return internal_err_resp()

    @staticmethod
    def delete(audio_id):
        msg = message(True, "")
        if not (audio_book := Podcast.query.get(audio_id)):
            return msg
        db.session.delete(audio_book)
        db.session.commit()
        return msg
            resp = message(True, "Song data sent")
            resp["song"] = song_data
            return resp, 200
        except Exception as error:
            current_app.logger.error(error)
            return internal_err_resp()

    @staticmethod
    def create(data):
        if errors := SongSchema().validate(data=data):
            return validation_error(False, errors), 400
        try:
            new_song = Song(name=data["name"], duration=data["duration"])
            db.session.add(new_song)
            db.session.commit()
            resp = message(True, "Song has been created.")
            resp["song"] = SongService.load_data(new_song)
            return resp, 200
        except Exception as reason:
            current_app.logger.exception(
                f"an error occur while creating Audiobook: {reason}", reason)
            return internal_err_resp(reason.__str__())

    @staticmethod
    def delete(audio_id):
        msg = message(True, "")
        if not (audio_book := Song.query.get(audio_id)):
            return msg
        db.session.delete(audio_book)
        db.session.commit()
        return msg
 def get_all():
     books = Podcast.query.all()
     podcast_data = PodcastService.load_data(books)
     resp = message(True, "")
     resp["podcasts"] = podcast_data
     return resp, 200