Advertisement
Guest User

Untitled

a guest
Dec 4th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.25 KB | None | 0 0
  1. import pymongo
  2.  
  3. from pprint import pprint
  4.  
  5. from pymongo import MongoClient
  6.  
  7. # other functions
  8.  
  9. def print_film_info(film):
  10.     print('Name: ' + film['name'])
  11.     print('Category: ' + film['category'])
  12.     print("\n")
  13.  
  14. def get_avg_rating(name):
  15.     count = 0
  16.     avg_rating = 0.0
  17.     for review in db.reviews.find({'film_name': name}):
  18.         avg_rating += float(review['rating'])
  19.         count = count + 1
  20.     if count == 0:
  21.         return None
  22.     else:
  23.         return avg_rating / count
  24.  
  25. # DB functions
  26.  
  27. def add_film(name, category):
  28.     if db.films.find({'name': name}).count() > 0:
  29.         raise ValueError('Film already in database!')
  30.     db.films.save( { 'name': name, 'category': category, 'actors': []} )
  31.  
  32. def clear():
  33.     result = db.films.delete_many({})
  34.     print ('Removed ' + str(result.deleted_count) + ' films')
  35.  
  36. def show_films(category):
  37.     if category == 'all':
  38.         for film in db.films.find():
  39.             print_film_info(film)
  40.     else:
  41.         for film in db.films.find({'category': category}):
  42.             print_film_info(film)
  43.  
  44. def show_film_info(name):
  45.     if db.films.find({'name': name}).count() == 0:
  46.         raise ValueError('No such film in database!')
  47.     film = db.films.find_one({'name': name})
  48.     print('Name: ' + film['name'])
  49.     print('Category: ' + film['category'])
  50.     print('Rating: ' + str(get_avg_rating(name)))
  51.     print 'Actors: ',
  52.     for actor in film['actors']:
  53.         print actor['name'],
  54.     print("\n")
  55.  
  56. def add_review(film_name, rating, text):
  57.     if db.films.find({'name': film_name}).count() == 0:
  58.         raise ValueError('No such film in database!')
  59.     print('name: ' + film_name)
  60.     print('review: ' + text)
  61.     db.reviews.save( { 'film_name': film_name, 'rating': int(rating), 'text': text} )
  62.  
  63. def show_reviews(film_name):
  64.     count = 0
  65.     for review in db.reviews.find({'film_name': film_name}):
  66.         count = count + 1
  67.         print('Review ' + str(count) + ":")
  68.         print('    Rating: ' + str(review['rating']))
  69.         print('    Review: ' + review['text'])
  70.         print("\n")
  71.     if count == 0:
  72.         print('None')
  73.  
  74. def add_actor(actor_name, film_name):
  75.     if db.films.find({'name': film_name}).count() == 0:
  76.         raise ValueError('No such film in database!')
  77.     actor = {'name': actor_name}
  78.     db.films.update( {"name": film_name}, {"$push": {'actors': actor}}, upsert=False, multi=True)
  79.  
  80. def show_actor_films(actor_name):
  81.     print("Actor " + actor_name + " was in the following films:")
  82.     count = 0
  83.     for film in db.films.find({"actors.name": actor_name}):
  84.         count = count + 1
  85.         print(film['name'])
  86.     if count == 0:
  87.         print('None')
  88.  
  89. def change_film_name(old_name, new_name):
  90.     if db.films.find({'name': old_name}).count() == 0:
  91.         raise ValueError('No such film in database!')
  92.     db.films.update({"name": old_name}, {"$set": {'name': new_name}}, upsert=False)
  93.  
  94. def change_film_category(name, new_category):
  95.     if db.films.find({'name': name}).count() == 0:
  96.         raise ValueError('No such film in database!')
  97.     db.films.update({"name": name}, {"$set": {'category': new_category}}, upsert=False)
  98.  
  99. # parse commands functions
  100.  
  101. def get_command_name(full_command):
  102.     parsed_command = full_command.split(" ")
  103.     return parsed_command[0]
  104.  
  105. def process_command(command_name, full_command):
  106.     parsed_command = full_command.split(" ")
  107.     if command_name == 'add_film':
  108.         name = parsed_command[1]
  109.         category = parsed_command[2]
  110.         add_film(name, category)
  111.     elif command_name == 'show_films':
  112.         category = parsed_command[1]
  113.         show_films(category)
  114.     elif command_name == 'show_film_info':
  115.         name = parsed_command[1]
  116.         show_film_info(name)
  117.     elif command_name == 'add_review':
  118.         film_name = parsed_command[1]
  119.         rating = parsed_command[2]
  120.         text = ""
  121.         for i in range (3, len(parsed_command)):
  122.             text += (' ' + parsed_command[i])
  123.         add_review(film_name, rating, text)
  124.     elif command_name == 'show_reviews':
  125.         film_name = parsed_command[1]
  126.         show_reviews(film_name)
  127.     elif command_name == 'show_actor_films':
  128.         actor_name = parsed_command[1]
  129.         show_actor_films(actor_name)
  130.     elif command_name == 'add_actor':
  131.         actor_name = parsed_command[1]
  132.         film_name = parsed_command[2]
  133.         add_actor(actor_name, film_name)
  134.     elif command_name == 'change_film_name':
  135.         old_name = parsed_command[1]
  136.         new_name = parsed_command[2]
  137.         change_film_name(old_name, new_name)
  138.     elif command_name == 'change_film_category':
  139.         name = parsed_command[1]
  140.         new_category = parsed_command[2]
  141.         change_film_category(name, new_category)
  142.     elif command_name == 'clear':
  143.         clear()
  144.     else:
  145.         print('Invalid command!')
  146.  
  147. # main program text
  148. client = MongoClient()
  149. command = 'empty'
  150. db = client.film_database
  151.  
  152. while command != 'exit':
  153.     command = raw_input(" $: ")
  154.     command_name = get_command_name(command)
  155.     try:
  156.         process_command(command_name, command)
  157.     except IndexError:
  158.         print 'Not enough command parameters!'
  159.     except Exception as error:
  160.         print('error: ' + repr(error))
  161.     print("\n");
  162.  
  163. print('See you around!')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement