def save_show(choice='new', **kwargs): # Convert to boolean kwargs['use_season_folders'] = 'use_season_folders' in kwargs # Download serie info from tvdb url = 'http://thetvdb.com/api/{api_key}/series/{id}/' r = requests.get(url.format(id=kwargs['tvdb_id'], api_key=models.API_KEY)) t = et.fromstring(r.content) show = {i.tag.lower(): i.text for i in t.find('Series')} # Only create show in db if it doesn't exist shows = Show.select().where(Show.tvdb_id == kwargs['tvdb_id']) if shows.count() == 0: s = Show.create(**dict(kwargs.items() + show.items())) else: s = list(shows)[0] # Only use valid keys showdata = dict(kwargs.items() + show.items()).items() d = {k: v for k, v in showdata if k in Show._meta.fields.keys()} d['tvdb_id'] = d['id'] del d['id'] d['date_last_updated'] = datetime.datetime.now() s.update(**d).execute() s.save_episodes('download_new_only' in kwargs, 'skip_specials' in kwargs) # Mark episodes as downloaded if they exist if choice == 'existing': s.check_download_status() return s.id
def create_show_submission(): form = ShowForm(request.form) try: new_show = Show(artist_id=form.artist_id.data, venue_id=form.venue_id.data, start_time=form.start_time.data) Show.create(new_show) flash('Show was successfully listed!') except ValueError: # FIXME melhorar essa exception flash('An error occurred. Show could not be listed.') return render_template('pages/home.html')
def create_show_submission(): form = ShowForm(request.form) try: new_show = Show(artist_id=form.artist_id.data, venue_id=form.venue_id.data, start_time=form.start_time.data) Show.create(new_show) flash('Show was successfully listed!', "success") except: flash('An error occurred. Show could not be listed.', "danger") return render_template('pages/home.html')
def create_show_submission(): # called to create new shows in the db, upon submitting new show listing form # TODO: insert form data as a new Show record in the db, instead error = False try: artist_id = request.form.get('artist_id') venue_id = request.form.get('venue_id') start_time = request.form.get('start_time') new_show = Show(venue_id=venue_id, artist_id=artist_id, start_time=start_time) Show.create(new_show) except: db.session.rollback() print(sys.exc_info()) error = True finally: if error: flash('An error occurred. Show could not be listed.') return render_template('pages/home.html') else: flash('Show was successfully listed!') return render_template('pages/home.html') db.session.close()
def main(plex_id=None, force=False): logger = logging.getLogger("plex-imdb-updater") db.create_connection("db.sqlite") # Connect to the Plex server logger.info("Connecting to the Plex server at '{base_url}'...".format(base_url=PLEX_URL)) try: plex = PlexServer(PLEX_URL, PLEX_TOKEN) except: logger.error("No Plex server found at: {base_url}".format(base_url=PLEX_URL)) return libraries = [] # Get list of movies from the Plex server for library_name in LIBRARY_NAMES: logger.info("Retrieving a list of movies/shows from the '{library}' library in Plex...".format(library=library_name)) try: libraries.append(plex.library.section(library_name)) except: logger.warning("The '{library}' library does not exist in Plex.".format(library=library_name)) continue if not DRY_RUN: conn_db = sqlite3.connect(PLEX_DATABASE_FILE) conn_db.isolation_level = None database = conn_db.cursor() else: database = None success = 0 failed = 0 for library in libraries: pbar = tqdm(library.all(), postfix=["", ""]) pbar.set_description("Processing " + library.title) for plex_object in pbar: pbar.postfix[0] = plex_object.title pbar.postfix[1] = "Processing" # first do a check if we specified a plex id if plex_id is not None and str(plex_object.ratingKey) != plex_id: continue # check if movie or show library if plex_object.TYPE is "movie": is_movie_library = True if not force and not should_update_media(plex_object.TYPE, plex_object): continue else: is_movie_library = False if not force and not should_update_media(plex_object.TYPE, plex_object): continue # resolve plex object to right identifiers imdb_id, tmdb_id, tvdb_id = resolve_ids(is_movie_library, plex_object, force, pbar) # if no imdb_id is found for plex guid, reset all ratings if not imdb_id: logger.debug("Missing IMDB ID. Skipping media object '{pm.title}'.".format(pm=plex_object)) if not DRY_RUN: db.reset_rating(database, plex_object) db.set_locked_fields(database, plex_object) failed = failed + 1 continue logger.debug("Getting ratings for imdb id '{imdb_id}'".format(imdb_id=imdb_id)) rating = None imdb_object = None # Check if we need to update this if force or should_update_media(plex_object.TYPE, plex_object): # first trying to get it from OMDB if config.OMDB_API_KEY: imdb_object = omdb.get_imdb_rating_from_omdb(imdb_id, pbar) if imdb_object is not None: logger.debug("{im}\t{pm.title}\tOMDB".format(pm=plex_object, im=imdb_object["imdb_rating"])) rating = imdb_object["imdb_rating"] # if no rating yet, try to get it directly from IMDB if (imdb_object is None or rating is None) and imdb.title_exists(imdb_id): imdb_object = imdb.get_title_ratings(imdb_id) if imdb_object is not None and "rating" in imdb_object: logger.debug("{im}\t{pm.title}\tIMDB".format(pm=plex_object, im=imdb_object["rating"])) rating = imdb_object["rating"] # reset in database if nothing could be fetched if rating is None and not DRY_RUN: logger.warning("Media not found on IMDB. Skipping '{pm.title} ({imdb_id})'.".format( pm=plex_object, imdb_id=imdb_id)) if not DRY_RUN: db.reset_rating(database, plex_object) db.set_locked_fields(database, plex_object) failed = failed + 1 continue if is_movie_library: # do update in local library for future reference db_movie = Movie.select().where(Movie.plex_id == plex_object.ratingKey) if db_movie.exists(): db.update_db_rating(db_movie.get(), rating) else: Movie.create( title=plex_object.title, plex_id=plex_object.ratingKey, imdb_id=imdb_id, rating=rating, tmdb_id=tmdb_id, release_date=plex_object.originallyAvailableAt ) else: # do update in local library for future reference db_show = Show.select().where(Show.plex_id == plex_object.ratingKey) if db_show.exists(): db.update_db_rating(db_show.get(), rating) else: Show.create( title=plex_object.title, plex_id=plex_object.ratingKey, imdb_id=imdb_id, rating=rating, release_date=plex_object.originallyAvailableAt, tvdb_id=tvdb_id ) if not DRY_RUN: # if not dry run, do a update in Plex' DB db.set_rating_and_imdb_image(database, plex_object, rating) db.set_locked_fields(database, plex_object) # now try to fetch seasons if not is_movie_library: for season in plex_object.seasons(): # don't do anything with specials if season.index is 0: logger.debug("Skipping specials") continue # check if enabled in settings if EPISODE_RATINGS: logger.debug("Getting episodes for {p.title} for season {season}".format( p=plex_object, season=season.index)) imdb_episodes = None for episode in season.episodes(): update_success = update_episode_rating(database, episode, imdb_episodes, imdb_id, plex_object, season) if update_success: success = success + 1 else: failed = failed + 1 if not DRY_RUN: while len(plex.sessions()) is not 0: logger.info("Plex Media Server in use... waiting 10 seconds before commiting changes") sleep(10) conn_db.commit() if not DRY_RUN: database.close() logger.info("Finished updating. {success} updated and {failed} failed".format(success=success, failed=failed))
def test_title(self): show = Show.create(13015) self.assertEqual(show.get_title(), "Arrow")