Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 16 additions & 14 deletions generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,24 @@


if __name__ == "__main__":
parser = argparse.ArgumentParser()

parser.add_argument('--username', '-u', help='Plex account username/email', required=True, type=str)
parser.add_argument('--password', '-p', help='Plex account password', required=True, type=str)
parser.add_argument('--resource', '-r', help='Plex server resource name', required=True, type=str)
parser.add_argument('--playlist_title', '-t', help='Name of target playlist to update', default='Music Bot', type=str)
parser.add_argument('--track_count', '-c', help='Number of tracks to add to playlist', default=50, type=int)

args = parser.parse_args()

print(f'Generating playlist named "{args.playlist_title}" with {args.track_count} tracks...')

PlexPlaylistBuilder(
parser = argparse.ArgumentParser()
parser.add_argument('--username', '-u', help='Plex account username/email', default=None, type=str)
parser.add_argument('--password', '-p', help='Plex account password', default=None, type=str)
parser.add_argument('--resource', '-r', help='Plex server resource name', default=None, type=str)
parser.add_argument('--server_url', '-s', help='Plex server url', default=None, type=str)
parser.add_argument('--token', '-tk', help='Plex token', default=None, type=str)
parser.add_argument('--playlist_title', '-t', help='Name of target playlist to update', default='Music Bot', type=str)
parser.add_argument('--track_count', '-c', help='Number of tracks to add to playlist', default=50, type=int)
args = parser.parse_args()
print(f'Generating playlist named "{args.playlist_title}" with {args.track_count} tracks...')
PlexPlaylistBuilder(
username=args.username,
password=args.password,
resource=args.resource
resource=args.resource,
server_url=args.server_url,
token=args.token,
).build_playlist(
playlist_title=args.playlist_title,
track_count=int(args.track_count)
Expand Down
51 changes: 29 additions & 22 deletions plex/connection.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,35 @@
from plexapi.myplex import MyPlexAccount
from plexapi.myplex import MyPlexAccount, PlexServer

class PlexConnection():
def __init__(self, username=None, password=None, resource=None):
self.username = username
self.password = password
self.resource = resource
self._server = None
def __init__(self, username=None, password=None, resource=None, server_url=None, token=None):
self.username = username
self.password = password
self.resource = resource
self.server_url = server_url
self.token = token
self._server = None

@property
def music_library(self, section_name='Music'):
return self.library.section(section_name)
@property
def music_library(self, section_name='Music'):
return self.library.section(section_name)

@property
def library(self):
return self.server.library
@property
def library(self):
return self.server.library

@property
def server(self):
if not self._server:
self._server = self._setup_server()
return self._server
@property
def server(self):
if not self._server:
self._server = self._setup_server()
return self._server

def _setup_server(self):
print(f'Connecting to Plex server {self.resource}...')
account = MyPlexAccount(self.username, self.password)
print(f'Connecting to Plex server {self.resource}... DONE.')
return account.resource(self.resource).connect()
def _setup_server(self):
print(f'Connecting to Plex server {self.resource}...')

# Use token if available, otherwise fall back to 2FA flow
if self.token:
return PlexServer(f'http://{self.server_url}:32400', token=self.token)
else:
two_factor_code = input("Enter your Plex 2FA code: ")
account = MyPlexAccount(self.username, self.password, code=two_factor_code)
return account.resource(self.resource).connect()
4 changes: 2 additions & 2 deletions plex_playlist_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@


class PlexPlaylistBuilder():
def __init__(self, username=None, password=None, resource=None):
def __init__(self, username=None, password=None, resource=None, server_url=None, token=None):
plex_library = PlexConnection(
username=username, password=password, resource=resource
username=username, password=password, resource=resource, server_url=server_url, token=token,
).music_library
self.music_library = PlexMusic(plex_library)

Expand Down