JBOPS/utility/plex_api_invite.py

128 lines
5.8 KiB
Python
Raw Normal View History

2018-01-19 19:51:49 +00:00
'''
Invite new users to share Plex libraries.
optional arguments:
-h, --help show this help message and exit
-s [], --share [] Share specific libraries or share all libraries.
(choices: share, share_all)
-u [], --user [] Enter a valid username(s) or email address(s) for user to be invited.
-l [ ...], --libraries [ ...]
Space separated list of case sensitive names to process. Allowed names are:
(choices: All library names)
--sync Allow user to sync content
--camera Allow user to upload photos
--channel Allow user to utilize installed channels
--movieRatings Add rating restrictions to movie library types
--movieLabels Add label restrictions to movie library types
--tvRatings Add rating restrictions to show library types
--tvLabels Add label restrictions to show library types
--musicLabels Add label restrictions to music library types
Usage:
plex_api_invite.py -s share -u USER -l Movies
- Shared libraries: ['Movies'] with USER
plex_api_invite.py -s share -u USER -l Movies "TV Shows"
- Shared libraries: ['Movies', 'TV Shows'] with USER
* Double Quote libraries with spaces
plex_api_invite.py -s share_all -u USER
- Shared all libraries with USER.
plex_api_invite.py -s share Movies -u USER --movieRatings G, PG-13
- Share Movie library with USER but restrict them to only G and PG-13 titles.
'''
2018-08-23 00:22:40 +00:00
from plexapi.server import PlexServer, CONFIG
2018-01-19 19:51:49 +00:00
import argparse
import requests
2018-08-23 00:22:40 +00:00
PLEX_URL = ''
PLEX_TOKEN = ''
PLEX_URL = CONFIG.data['auth'].get('server_baseurl', PLEX_URL)
PLEX_TOKEN = CONFIG.data['auth'].get('server_token', PLEX_TOKEN)
2018-01-19 19:51:49 +00:00
sess = requests.Session()
2018-08-23 00:23:32 +00:00
# Ignore verifying the SSL certificate
sess.verify = False # '/path/to/certfile'
# If verify is set to a path to a directory,
# the directory must have been processed using the c_rehash utility supplied
# with OpenSSL.
if sess.verify is False:
# Disable the warning that the request is insecure, we know that...
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
2018-01-19 19:51:49 +00:00
plex = PlexServer(PLEX_URL, PLEX_TOKEN, session=sess)
sections_lst = [x.title for x in plex.library.sections()]
ratings_lst = ['G', 'PG', 'PG-13', 'R', 'NC-17', 'TV-G', 'TV-Y', 'TV-Y7', 'TV-14', 'TV-PG', 'TV-MA']
def invite(user, sections, allowSync, camera, channels, filterMovies, filterTelevision, filterMusic):
plex.myPlexAccount().inviteFriend(user=user, server=plex, sections=sections, allowSync=allowSync,
allowCameraUpload=camera, allowChannels=channels, filterMovies=filterMovies,
filterTelevision=filterTelevision, filterMusic=filterMusic)
print('Invited {user} to share libraries: {libraries}.'.format(libraries=sections, user=user))
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Invite new users to share Plex libraries.",
formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('-s', '--share', nargs='?', type=str, required=True,
choices=['share', 'share_all'], metavar='',
help='Share specific libraries or share all libraries.: \n (choices: %(choices)s)')
parser.add_argument('-u', '--user', nargs='+', type=str, required=True, metavar='',
help='Enter a valid username(s) or email address(s) for user to be invited.')
parser.add_argument('-l', '--libraries', nargs='+', default='', choices=sections_lst, metavar='',
help='Space separated list of case sensitive names to process. Allowed names are: \n'
'(choices: %(choices)s')
2018-02-05 15:24:51 +00:00
parser.add_argument('--sync', default=False, action='store_true',
2018-01-19 19:51:49 +00:00
help='Use to allow user to sync content.')
parser.add_argument('--camera', default=False, action='store_true',
help='Use to allow user to upload photos.')
parser.add_argument('--channels', default=False, action='store_true',
help='Use to allow user to utilize installed channels.')
2018-02-05 15:24:51 +00:00
parser.add_argument('--movieRatings', nargs='+', choices=ratings_lst, metavar='',
2018-01-19 19:51:49 +00:00
help='Use to add rating restrictions to movie library types.')
2018-02-05 15:24:51 +00:00
parser.add_argument('--movieLabels', nargs='+',
2018-01-19 19:51:49 +00:00
help='Use to add label restrictions for movie library types.')
2018-02-05 15:24:51 +00:00
parser.add_argument('--tvRatings', nargs='+', choices=ratings_lst, metavar='',
2018-01-19 19:51:49 +00:00
help='Use to add rating restrictions for show library types.')
2018-02-05 15:24:51 +00:00
parser.add_argument('--tvLabels', nargs='+',
2018-01-19 19:51:49 +00:00
help='Use to add label restrictions for show library types.')
2018-02-05 15:24:51 +00:00
parser.add_argument('--musicLabels', nargs='+',
2018-01-19 19:51:49 +00:00
help='Use to add label restrictions for music library types.')
opts = parser.parse_args()
filterMovies = {}
filterTelevision = {}
filterMusic = {}
if opts.movieLabels:
2018-01-20 07:19:33 +00:00
filterMovies['label'] = opts.movieLabels
2018-01-19 19:51:49 +00:00
if opts.movieRatings:
filterMovies['contentRating'] = opts.movieRatings
if opts.tvLabels:
2018-01-20 07:19:33 +00:00
filterTelevision['label'] = opts.tvLabels
2018-01-19 19:51:49 +00:00
if opts.tvRatings:
filterTelevision['contentRating'] = opts.tvRatings
if opts.musicLabels:
2018-01-20 07:19:33 +00:00
filterMusic['label'] = opts.musicLabels
2018-01-19 19:51:49 +00:00
for user in opts.user:
if opts.share == 'share':
invite(user, opts.libraries, opts.sync, opts.camera, opts.channels,
filterMovies, filterTelevision, filterMusic)
elif opts.share == 'share_all':
invite(user, sections_lst, opts.sync, opts.camera, opts.channels,
filterMovies, filterTelevision, filterMusic)