adding logging. only errors will make it to the log file.

This commit is contained in:
Blacktwin 2019-07-29 11:20:52 -04:00
parent e73dca7557
commit 85f9dac29e

View File

@ -100,7 +100,9 @@ optional arguments:
"""
import sys
import os
import random
import logging
import requests
import argparse
import operator
@ -109,6 +111,26 @@ import unicodedata
from collections import Counter
from plexapi.server import PlexServer, CONFIG
filename = os.path.basename(__file__)
filename = filename.split('.')[0]
logger = logging.getLogger(filename)
logger.setLevel(logging.DEBUG)
error_format = logging.Formatter('%(asctime)s:%(name)s:%(funcName)s:%(message)s')
stream_format = logging.Formatter('%(message)s')
file_handler = logging.FileHandler('{}.log'.format(filename))
file_handler.setLevel(logging.ERROR)
file_handler.setFormatter(error_format)
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(stream_format)
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
# ### EDIT SETTINGS ###
PLEX_URL = ''
@ -273,9 +295,9 @@ def sort_by_dates(video, date_type):
return [[video.ratingKey] + [str(video.originallyAvailableAt)]]
# todo-me return object
except Exception:
# print(e)
return
except Exception as e:
logger.exception(e)
exit()
def multi_filter_search(keyword_dict, library, search_eps=None):
@ -450,6 +472,7 @@ def get_content(libraries, jbop, filters=None, search=None, limit=None):
# Remove date used for sorting
play_lst = [x[0] for x in aired_lst]
else:
# todo-me probably will want to check limit by itself
if jbop == "random" and limit:
child_lst = random.sample(child_lst, limit)
play_lst = child_lst
@ -487,8 +510,8 @@ def build_playlist(jbop, libraries=None, days=None, top=None, filters=None, sear
try:
keys_list = get_content(libraries, jbop, filters, search, limit)
except TypeError as e:
print("Libraries are not defined for {}. Use --libraries.".format(jbop))
exit("Error: {}".format(e))
logger.exception("Libraries are not defined for {}. Use --libraries.".format(jbop))
exit()
return keys_list
@ -504,7 +527,7 @@ def share_playlists(playlist_titles, users):
"""
for user in users:
for title in playlist_titles:
print("...Shared {title} playlist to '{user}'.".format(title=title, user=user))
logger.info("...Shared {title} playlist to '{user}'.".format(title=title, user=user))
plex.playlist(title).copyToUser(user)
exit()
@ -533,7 +556,7 @@ def show_playlist(playlist_title, playlist_keys):
title = unicodedata.normalize('NFKD', title).encode('ascii', 'ignore').translate(None, "'")
playlist_list.append(title)
print(u"Contents of Playlist {title}:\n{playlist}".format(
logger.info(u"Contents of Playlist {title}:\n{playlist}".format(
title=playlist_title,
playlist=', '.join(playlist_list)))
exit()
@ -564,16 +587,14 @@ def create_playlist(playlist_title, playlist_keys, server, user):
except Exception:
try:
obj = plex.fetchItem(key)
print("{} may not have permission to this title: {}".format(user, obj.title))
# print("Error: {}".format(e))
logger.exception("{} may not have permission to this title: {}".format(user, obj.title))
pass
except Exception:
print('Rating Key: {}, may have been deleted or moved.'.format(key))
# print("Error: {}".format(e))
logger.exception('Rating Key: {}, may have been deleted or moved.'.format(key))
if playlist_list:
server.createPlaylist(playlist_title, playlist_list)
print("...Added Playlist: {title} to '{user}'.".format(title=playlist_title, user=user))
logger.info("...Added Playlist: {title} to '{user}'.".format(title=playlist_title, user=user))
def delete_playlist(playlist_dict, title):
@ -595,17 +616,17 @@ def delete_playlist(playlist_dict, title):
# If str then updating playlist
if playlist.title == title:
playlist.delete()
print("...Deleted Playlist: {playlist.title} for '{user}'."
logger.info("...Deleted Playlist: {playlist.title} for '{user}'."
.format(playlist=playlist, user=user))
if isinstance(title, list):
# If list then removing selected playlists
if playlist.title in title:
playlist.delete()
print("...Deleted Playlist: {playlist.title} for '{user}'."
logger.info("...Deleted Playlist: {playlist.title} for '{user}'."
.format(playlist=playlist, user=user))
except Exception:
# print("Playlist not found on '{user}' account".format(user=user))
logger.exception("Playlist not found on '{user}' account".format(user=user))
pass
@ -668,7 +689,7 @@ def create_title(jbop, libraries, days, filters, search, limit):
elif jbop == 'random':
if not limit:
print("Random selector needs a limit. Use --limit.")
logger.info("Random selector needs a limit. Use --limit.")
exit()
title = selectors()['random'].format(count=limit, libraries='/'.join(libraries.values()))
@ -756,7 +777,7 @@ if __name__ == "__main__":
filters[k] = v.split(",")
# Check if provided filter exist, exit if it doesn't exist
if not (set(filters.keys()) & set(filters_lst)):
print('({}) was not found in filters list: [{}]'
logger.error('({}) was not found in filters list: [{}]'
.format(' '.join(filters.keys()), ', '.join(filters_lst)))
exit()
@ -774,7 +795,7 @@ if __name__ == "__main__":
for user in users:
# todo-me smart playlists will have to recreated in users server instance
if opts.action == 'share' and selected_playlists:
print("Sharing playlist(s)...")
logger.info("Sharing playlist(s)...")
share_playlists(selected_playlists, users)
user_acct = account.user(user)
user_server = PlexServer(PLEX_URL, user_acct.get_token(plex.machineIdentifier))
@ -794,11 +815,11 @@ if __name__ == "__main__":
'all_playlists': playlist_lst})
if not opts.jbop and opts.action == 'show':
print("Displaying the user's playlist(s)...")
logger.info("Displaying the user's playlist(s)...")
for data in playlist_dict['data']:
user = data['user']
playlists = data['all_playlists']
print("{}'s current playlist(s): {}".format(user, ', '.join(playlists)))
logger.info("{}'s current playlist(s): {}".format(user, ', '.join(playlists)))
exit()
if libraries:
@ -807,7 +828,7 @@ if __name__ == "__main__":
# Remove or build playlists
if opts.action == 'remove':
print("Deleting the playlist(s)...")
logger.info("Deleting the playlist(s)...")
for data in playlist_dict['data']:
titles = data['user_selected']
delete_playlist(data, titles)
@ -824,19 +845,23 @@ if __name__ == "__main__":
title = opts.name
if opts.jbop and opts.action == 'show':
show_playlist(title, keys_list)
if len(libraries) > 0:
show_playlist(title, keys_list)
else:
logger.error("Missing --libraries or --allLibraries")
exit()
if opts.action == 'update':
print("Deleting the playlist(s)...")
logger.info("Deleting the playlist(s)...")
for data in playlist_dict['data']:
delete_playlist(data, title)
print('Creating playlist(s)...')
logger.info('Creating playlist(s)...')
for data in playlist_dict['data']:
create_playlist(title, keys_list, data['server'], data['user'])
if opts.action == 'add':
print('Creating playlist(s)...')
logger.info('Creating playlist(s)...')
for data in playlist_dict['data']:
create_playlist(title, keys_list, data['server'], data['user'])
print("Done.")
logger.info("Done.")