Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pymongo
- from pprint import pprint
- from pymongo import MongoClient
- # other functions
- def print_film_info(film):
- print('Name: ' + film['name'])
- print('Category: ' + film['category'])
- print("\n")
- def get_avg_rating(name):
- count = 0
- avg_rating = 0.0
- for review in db.reviews.find({'film_name': name}):
- avg_rating += float(review['rating'])
- count = count + 1
- if count == 0:
- return None
- else:
- return avg_rating / count
- # DB functions
- def add_film(name, category):
- if db.films.find({'name': name}).count() > 0:
- raise ValueError('Film already in database!')
- db.films.save( { 'name': name, 'category': category, 'actors': []} )
- def clear():
- result = db.films.delete_many({})
- print ('Removed ' + str(result.deleted_count) + ' films')
- def show_films(category):
- if category == 'all':
- for film in db.films.find():
- print_film_info(film)
- else:
- for film in db.films.find({'category': category}):
- print_film_info(film)
- def show_film_info(name):
- if db.films.find({'name': name}).count() == 0:
- raise ValueError('No such film in database!')
- film = db.films.find_one({'name': name})
- print('Name: ' + film['name'])
- print('Category: ' + film['category'])
- print('Rating: ' + str(get_avg_rating(name)))
- print 'Actors: ',
- for actor in film['actors']:
- print actor['name'],
- print("\n")
- def add_review(film_name, rating, text):
- if db.films.find({'name': film_name}).count() == 0:
- raise ValueError('No such film in database!')
- print('name: ' + film_name)
- print('review: ' + text)
- db.reviews.save( { 'film_name': film_name, 'rating': int(rating), 'text': text} )
- def show_reviews(film_name):
- count = 0
- for review in db.reviews.find({'film_name': film_name}):
- count = count + 1
- print('Review ' + str(count) + ":")
- print(' Rating: ' + str(review['rating']))
- print(' Review: ' + review['text'])
- print("\n")
- if count == 0:
- print('None')
- def add_actor(actor_name, film_name):
- if db.films.find({'name': film_name}).count() == 0:
- raise ValueError('No such film in database!')
- actor = {'name': actor_name}
- db.films.update( {"name": film_name}, {"$push": {'actors': actor}}, upsert=False, multi=True)
- def show_actor_films(actor_name):
- print("Actor " + actor_name + " was in the following films:")
- count = 0
- for film in db.films.find({"actors.name": actor_name}):
- count = count + 1
- print(film['name'])
- if count == 0:
- print('None')
- def change_film_name(old_name, new_name):
- if db.films.find({'name': old_name}).count() == 0:
- raise ValueError('No such film in database!')
- db.films.update({"name": old_name}, {"$set": {'name': new_name}}, upsert=False)
- def change_film_category(name, new_category):
- if db.films.find({'name': name}).count() == 0:
- raise ValueError('No such film in database!')
- db.films.update({"name": name}, {"$set": {'category': new_category}}, upsert=False)
- # parse commands functions
- def get_command_name(full_command):
- parsed_command = full_command.split(" ")
- return parsed_command[0]
- def process_command(command_name, full_command):
- parsed_command = full_command.split(" ")
- if command_name == 'add_film':
- name = parsed_command[1]
- category = parsed_command[2]
- add_film(name, category)
- elif command_name == 'show_films':
- category = parsed_command[1]
- show_films(category)
- elif command_name == 'show_film_info':
- name = parsed_command[1]
- show_film_info(name)
- elif command_name == 'add_review':
- film_name = parsed_command[1]
- rating = parsed_command[2]
- text = ""
- for i in range (3, len(parsed_command)):
- text += (' ' + parsed_command[i])
- add_review(film_name, rating, text)
- elif command_name == 'show_reviews':
- film_name = parsed_command[1]
- show_reviews(film_name)
- elif command_name == 'show_actor_films':
- actor_name = parsed_command[1]
- show_actor_films(actor_name)
- elif command_name == 'add_actor':
- actor_name = parsed_command[1]
- film_name = parsed_command[2]
- add_actor(actor_name, film_name)
- elif command_name == 'change_film_name':
- old_name = parsed_command[1]
- new_name = parsed_command[2]
- change_film_name(old_name, new_name)
- elif command_name == 'change_film_category':
- name = parsed_command[1]
- new_category = parsed_command[2]
- change_film_category(name, new_category)
- elif command_name == 'clear':
- clear()
- else:
- print('Invalid command!')
- # main program text
- client = MongoClient()
- command = 'empty'
- db = client.film_database
- while command != 'exit':
- command = raw_input(" $: ")
- command_name = get_command_name(command)
- try:
- process_command(command_name, command)
- except IndexError:
- print 'Not enough command parameters!'
- except Exception as error:
- print('error: ' + repr(error))
- print("\n");
- print('See you around!')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement