コード例 #1
0
    def get(self, name):
        movie = MovieModel.get_movie(name=name)

        if movie:
            return movie.get_json(), 200

        return {"error": f"No Movie with the name {name}"}, 404
コード例 #2
0
ファイル: movie.py プロジェクト: heitii/moviedatabaseAPI
    def put(self, name):
        data = Movie.parser.parse_args()

        movie = MovieModel.find_by_name(name)

        if movie is None:
            movie = MovieModel(name, **data)
        else:
            movie.year = data['year']
            movie.length = data['length']
            movie.director = data['director']

        movie.save_to_db()
        return movie.json()
コード例 #3
0
 def post(cls):
     data = request.get_json()
     actor = ActorModel.find_by_primaryName(data.get('name'))
     print(f' {actor.primaryName} play in:')
     counter = 1
     for movie_id in actor.knownForTitles:
         movie = MovieModel.find_by_tconst(movie_id)
         print(f'\t{counter} - {movie.originalTitle}')
         counter += 1
コード例 #4
0
 def get(cls, year: int):
     movies_list = MovieModel.find_by_year(str(year))
     for movie in movies_list:
         print(f'{movie.primaryTitle} - {movie.genres}  ')
         actors = ActorModel.find_by_movie(movie.tconst)
         counter = 0
         for actor in actors:
             counter += 1
             print(f' \t {counter} - {actor.primaryName}')
コード例 #5
0
    def delete(cls, imdbID: str):
        movie = MovieModel.find_by_imdbID(imdbID)

        if movie:
            movie.delete_from_db()
            return {"message": "Movie deleted successfully"}, 200

        return {
            "message": f"Error!!, movie with {imdbID} imdbID was not found"
        }, 404
コード例 #6
0
    def get(cls):

        with open('title_data.tsv') as file:
            dict_records = csv.DictReader(file, delimiter='\t')
            for record in dict_records:
                movie = MovieModel(
                    tconst=record['tconst'],
                    titleType=record['titleType'],
                    primaryTitle=record['primaryTitle'],
                    originalTitle=record['originalTitle'],
                    isAdult=False if record['isAdult'] == '0' else True,
                    startYear=datetime.strptime(record['startYear'], '%Y')
                    if not record['startYear'] == '\\N' else None,
                    endYear=datetime.strptime(record['endYear'], '%Y')
                    if not record['endYear'] == '\\N' else None,
                    runtimeMinutes=0 if record['runtimeMinutes'] == '\\N' else
                    record['runtimeMinutes'],
                    genres=record['genres'].split(','))
                movie.save_to_db()
コード例 #7
0
ファイル: theatre_schedule.py プロジェクト: lagnam/RestAPI
    def post(self, theatre_name):
        data = TheatreSchedule.parser.parse_args()
        data = {k: v for k, v in data.items() if v is not None}

        logger.info("Validating request data")
        if not all(key in data for key in ['time', 'movie', 'screen']):
            return {
                "error":
                "['time', 'theatre', 'screen'] parameters required for creating a schedule"
            }, 400
        elif data["screen"] <= 0:
            return {"error": "Invalid screen number"}, 400

        theatre = TheatreModel.get_theatre(name=theatre_name)
        movie = MovieModel.get_movie(name=data["movie"])

        if not theatre:
            return {
                "error": f"No theatre found with the name {theatre_name}"
            }, 404
        elif not movie:
            return {
                "error": f"No movie found with the name {data['movie']}"
            }, 404
        elif theatre.screens < data["screen"]:
            return {"error": f"No such screen in theatre:{theatre}"}, 400

        try:
            result = ScheduleModel.get_schedule(theatre_id=theatre.id,
                                                movie_id=movie.id,
                                                screen=data["screen"],
                                                time=data["time"])

            if result:
                logger.info("schedule not found")
                return {"error": f"No schedule with the passed data"}, 400

            schedule = ScheduleModel(
                theatre_id=theatre.id,
                movie_id=movie.id,
                time=data["time"],
                screen=data["screen"],
            )
        except InvalidTimeException as e:
            return {"error": "Invalid time format"}, 400

        schedule.save_to_db()

        return {
            "movie": data["movie"],
            "theatre": theatre_name,
            "time": schedule.time.strftime("%H:%M"),
        }, 201
コード例 #8
0
 def post(cls):
     data = request.get_json()
     year = data.get('year')
     genre = data.get('genre')
     movies_list = MovieModel.find_by_year_and_genere(year, genre)
     for movie in movies_list:
         print(f'{movie.primaryTitle} - {movie.genres}  ')
         actors = ActorModel.find_by_movie(movie.tconst)
         counter = 0
         for actor in actors:
             counter += 1
             print(f' \t {counter} - {actor.primaryName}')
コード例 #9
0
ファイル: theatre_schedule.py プロジェクト: lagnam/RestAPI
    def get(self, theatre_name):
        data = TheatreSchedule.parser.parse_args()
        data = {k: v for k, v in data.items() if v is not None}

        logger.info("Validating request data")
        if "screen" in data or "time" in data:
            return {
                "error": "Display of only theatre schedule is allowed"
            }, 400
        elif len(data) > 1 or (len(data) == 1 and "movie" not in data):
            return {
                "error": "movie is only accepted as a valid parameter"
            }, 400

        theatre = TheatreModel.get_theatre(theatre_name)
        if not theatre:
            return {
                "error": f"No theatre found with the name {theatre_name}"
            }, 404
        elif data.get("movie"):
            movie = MovieModel.get_movie(name=data["movie"])
            if not movie:
                return {
                    "error": f"No movie found with the name{data['movie']}"
                }, 404
            theatre_schedules = ScheduleModel.get_schedule(
                movie_id=movie.id, theatre_id=theatre.id)
        else:
            theatre_schedules = ScheduleModel.get_schedule(
                theatre_id=theatre.id)
        result = {}

        for schedule in theatre_schedules:
            movie = MovieModel.get_movie_by_id(movie_id=schedule.movie_id)
            if result.get(movie.name):
                result[movie.name].append(schedule.time.strftime("%H:%M"))
            else:
                result[movie.name] = [schedule.time.strftime("%H:%M")]

        return result, 200
コード例 #10
0
    def delete(self, name):
        movie = MovieModel.get_movie(name)

        logger.info("Validating request data")
        if not movie:
            return {"error": f"No Movie with the name {name}"}, 404

        schedules = ScheduleModel.get_schedule(movie_id=movie.id)
        if len(schedules) > 0:
            logger.info("Schedule not found")
            return {
                "error": f"Delete schedule of the movie before deleting it"
            }, 400

        movie.delete_from_db()

        return None, 204
コード例 #11
0
ファイル: theatre_schedule.py プロジェクト: lagnam/RestAPI
    def put(self, theatre_name):
        data = TheatreSchedule.parser.parse_args()

        logger.info("Validating request data")
        if any(True for key, val in data.items() if val is None):
            return {
                "error":
                f"{list(data.keys())} are required for updating schedule time"
            }, 400

        theatre = TheatreModel.get_theatre(theatre_name)
        movie = MovieModel.get_movie(data["movie"])
        if not theatre:
            return {
                "error": f"No theatre found with the name {theatre_name}"
            }, 404
        elif not movie:
            return {"error": f"No movie with the name {data['movie']}"}, 404
        elif data["screen"] <= 0:
            return {"error": "Invalid screen number"}, 400
        elif theatre.screens < data["screen"]:
            return {"error": f"No such screen in theatre:{theatre}"}, 400

        try:
            result = ScheduleModel.get_schedule(theatre_id=theatre.id,
                                                movie_id=movie.id,
                                                screen=data["screen"],
                                                time=data["time"])
            if not result:
                logger.info("schedule not found")
                return {"error": f"No schedule with the passed data"}, 404

            schedule = result[0]
        except InvalidTimeException:
            return {"error": "Invalid time format in updated_time"}, 400

        try:
            schedule.time = datetime.strptime(data['updated_time'],
                                              "%H:%M").time()
        except ValueError:
            return {"error": "Invalid time format"}, 400

        schedule.save_to_db()

        return None, 204
コード例 #12
0
    def post(cls):
        movie_json = request.get_json()
        movie = movie_schema.load(movie_json)

        if MovieModel.find_by_imdbID(movie.imdbID):
            return {
                "message": f"Movie with this {movie.imdbID} is already exists"
            }, 400

        try:
            movie.isFav = True
            movie.save_to_db()
        except:
            return {
                "message": "Error while saving your favorite movie in to DB"
            }, 500

        return movie_schema.dump(movie), 201
コード例 #13
0
    def put(self, name):
        data = Movie.parser.parse_args()
        movie = MovieModel.get_movie(name)

        logger.info("Validating request data")
        if not movie:
            return {"error": f"No movie with the name {name}"}, 404

        data = {k: v for k, v in data.items() if v is not None}

        if len(data) == 0:
            return {"error": "No data passed to update"}, 400

        for k, v in data.items():
            setattr(movie, k, v)
        movie.save_to_db()

        return None, 204
コード例 #14
0
ファイル: theatre_schedule.py プロジェクト: lagnam/RestAPI
    def delete(self, theatre_name):
        data = TheatreSchedule.parser.parse_args()
        data = {k: v for k, v in data.items() if v is not None}

        logger.info("Validating request data")
        if "time" in data and "movie" not in data and "screen" not in data:
            return {"error": "movie or screen not specified"}, 400

        theatre = TheatreModel.get_theatre(theatre_name)
        if not theatre:
            return {"error": f"No movie with the name {theatre_name}"}, 404
        elif data.get("movie"):
            movie = MovieModel.get_movie(data["movie"])
            if not movie:
                return {
                    "error": f"No movie with the name {data['movie']}"
                }, 404
            del data["movie"]
            data["movie_id"] = movie.id
        elif data.get("updated_time"):
            return {"error": "Invalid parameter updated_time is passed"}, 400

        if data.get("screen") is not None:
            if data["screen"] <= 0:
                return {"error": "Invalid screen number"}, 400
            elif theatre.screens < data["screen"]:
                return {"error": f"No such screen in theatre:{theatre}"}, 404

        try:
            schedules = ScheduleModel.get_schedule(theatre_id=theatre.id,
                                                   **data)
        except InvalidTimeException:
            return {"error": "Invalid time is passed"}, 400

        if not schedules:
            logger.info("schedule not found")
            return {"error": f"Schedule not found"}, 404

        for schedule in schedules:
            schedule.delete_from_db()

        return None, 204
コード例 #15
0
    def post(self, name):
        data = Movie.parser.parse_args()

        logger.info("Validating request data")
        if not data.get("genre"):
            return {"error": "Genre parameter not passed"}, 400

        if MovieModel.get_movie(name):
            return {"error": f"Movie already exists with the name {name}"}, 400

        data = {k: v for k, v in data.items() if v is not None}
        movie = MovieModel(name, **data)
        movie.save_to_db()

        return movie.get_json(), 201
コード例 #16
0
ファイル: movie.py プロジェクト: heitii/moviedatabaseAPI
    def post(self, name):
        if MovieModel.find_by_name(name):
            return {
                'message':
                "A movie with name '{}' already exists.".format(name)
            }, 400

        data = Movie.parser.parse_args()
        movie = MovieModel(name, **data)

        try:
            movie.save_to_db()
        except:
            return {"message": "An error occurred inserting the movie."}, 500

        return movie.json(), 201
コード例 #17
0
 def get(cls):
     return {"movies": movie_list_schema.dump(MovieModel.find_all())}, 200
コード例 #18
0
 def get(self, name):
     movie = MovieModel.get_movie(name)
     if movie:
         return {"name": movie.name, "genre": movie.genre}
     return {"message": "filmu nie znaleziono"}, 418
コード例 #19
0
ファイル: init_db.py プロジェクト: lagnam/RestAPI
def initialize_db():
    user1 = UserModel(name="admin", type="admin")
    user2 = UserModel(name="owner", type="owner")
    user3 = UserModel(name="user", type="user")
    db.session.add(user1)
    db.session.add(user2)
    db.session.add(user3)
    db.session.commit()

    th1 = TheatreModel(name="theatre1", screens=2, location="hyd")
    th2 = TheatreModel(name="theatre2", screens=4, location="hyd")
    th3 = TheatreModel(name="theatre3", screens=1, location="hyd")
    th4 = TheatreModel(name="test", screens=1, location="hyd")
    db.session.add(th1)
    db.session.add(th2)
    db.session.add(th3)
    db.session.add(th4)

    mv1 = MovieModel(name="avengers1", genre="gnr1")
    mv2 = MovieModel(name="avengers2", genre="gnr2")
    mv3 = MovieModel(name="avengers3", genre="gnr1")
    mv4 = MovieModel(name="avengers4", genre="gnr3")
    mv5 = MovieModel(name="test", genre="gnr3")
    db.session.add(mv1)
    db.session.add(mv2)
    db.session.add(mv3)
    db.session.add(mv4)
    db.session.add(mv5)

    db.session.commit()

    sch1 = ScheduleModel(movie_id=mv1.id,
                         theatre_id=th1.id,
                         screen=1,
                         time="11:30")
    sch2 = ScheduleModel(movie_id=mv2.id,
                         theatre_id=th1.id,
                         screen=2,
                         time="11:50")
    sch3 = ScheduleModel(movie_id=mv3.id,
                         theatre_id=th1.id,
                         screen=1,
                         time="14:30")
    sch4 = ScheduleModel(movie_id=mv2.id,
                         theatre_id=th1.id,
                         screen=1,
                         time="16:15")
    sch5 = ScheduleModel(movie_id=mv4.id,
                         theatre_id=th1.id,
                         screen=2,
                         time="19:00")
    sch6 = ScheduleModel(movie_id=mv2.id,
                         theatre_id=th1.id,
                         screen=1,
                         time="20:30")
    sch7 = ScheduleModel(movie_id=mv1.id,
                         theatre_id=th1.id,
                         screen=2,
                         time="23:30")
    sch8 = ScheduleModel(movie_id=mv4.id,
                         theatre_id=th1.id,
                         screen=2,
                         time="21:05")

    sch9 = ScheduleModel(movie_id=mv4.id,
                         theatre_id=th2.id,
                         screen=1,
                         time="10:45")
    sch10 = ScheduleModel(movie_id=mv3.id,
                          theatre_id=th2.id,
                          screen=1,
                          time="13:50")
    sch11 = ScheduleModel(movie_id=mv3.id,
                          theatre_id=th2.id,
                          screen=1,
                          time="18:35")
    sch12 = ScheduleModel(movie_id=mv2.id,
                          theatre_id=th2.id,
                          screen=1,
                          time="21:30")
    sch13 = ScheduleModel(movie_id=mv1.id,
                          theatre_id=th2.id,
                          screen=2,
                          time="11:05")
    sch14 = ScheduleModel(movie_id=mv4.id,
                          theatre_id=th2.id,
                          screen=2,
                          time="15:00")
    sch15 = ScheduleModel(movie_id=mv4.id,
                          theatre_id=th2.id,
                          screen=2,
                          time="19:30")
    sch16 = ScheduleModel(movie_id=mv2.id,
                          theatre_id=th2.id,
                          screen=2,
                          time="22:00")
    sch17 = ScheduleModel(movie_id=mv1.id,
                          theatre_id=th2.id,
                          screen=3,
                          time="10:15")
    sch18 = ScheduleModel(movie_id=mv1.id,
                          theatre_id=th2.id,
                          screen=3,
                          time="14:30")
    sch19 = ScheduleModel(movie_id=mv2.id,
                          theatre_id=th2.id,
                          screen=3,
                          time="17:30")
    sch20 = ScheduleModel(movie_id=mv2.id,
                          theatre_id=th2.id,
                          screen=3,
                          time="23:30")
    sch21 = ScheduleModel(movie_id=mv4.id,
                          theatre_id=th2.id,
                          screen=4,
                          time="09:30")
    sch22 = ScheduleModel(movie_id=mv1.id,
                          theatre_id=th2.id,
                          screen=4,
                          time="12:30")
    sch23 = ScheduleModel(movie_id=mv3.id,
                          theatre_id=th2.id,
                          screen=4,
                          time="16:50")
    sch24 = ScheduleModel(movie_id=mv4.id,
                          theatre_id=th2.id,
                          screen=4,
                          time="20:50")

    sch25 = ScheduleModel(movie_id=mv4.id,
                          theatre_id=th3.id,
                          screen=4,
                          time="10:35")
    sch26 = ScheduleModel(movie_id=mv3.id,
                          theatre_id=th3.id,
                          screen=4,
                          time="13:15")
    sch27 = ScheduleModel(movie_id=mv4.id,
                          theatre_id=th3.id,
                          screen=4,
                          time="16:05")
    sch28 = ScheduleModel(movie_id=mv1.id,
                          theatre_id=th3.id,
                          screen=4,
                          time="21:50")

    db.session.add(sch1)
    db.session.add(sch2)
    db.session.add(sch3)
    db.session.add(sch4)
    db.session.add(sch5)
    db.session.add(sch6)
    db.session.add(sch7)
    db.session.add(sch8)
    db.session.add(sch9)
    db.session.add(sch10)
    db.session.add(sch11)
    db.session.add(sch12)
    db.session.add(sch13)
    db.session.add(sch14)
    db.session.add(sch15)
    db.session.add(sch16)
    db.session.add(sch17)
    db.session.add(sch18)
    db.session.add(sch19)
    db.session.add(sch20)
    db.session.add(sch21)
    db.session.add(sch22)
    db.session.add(sch23)
    db.session.add(sch24)
    db.session.add(sch25)
    db.session.add(sch26)
    db.session.add(sch27)
    db.session.add(sch28)

    db.session.commit()
コード例 #20
0
    def get(self, _id):
        movie = MovieModel.find_by_id(_id)

        if movie:
            return movie_schema.dump(movie).data
コード例 #21
0
ファイル: movie.py プロジェクト: heitii/moviedatabaseAPI
 def delete(self, name):
     movie = MovieModel.find_by_name(name)
     if movie:
         movie.delete_from_db()
     return {'message': 'Movie deleted'}
コード例 #22
0
ファイル: movie.py プロジェクト: heitii/moviedatabaseAPI
 def get(self, name):
     movie = MovieModel.find_by_name(name)
     if movie:
         return movie.json()
     return {'message': 'Movie not found'}, 404