Add files via upload
Added functionality to allow dynamic labeling of items added to plex based on the filepath of the new item.
This commit is contained in:
parent
e097a07ca5
commit
fe85144471
87
utility/add_label_by_filepaths.pyw
Normal file
87
utility/add_label_by_filepaths.pyw
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
'''
|
||||||
|
Description: Automatically add a label to recently added items in
|
||||||
|
your Plex library, based on a list of tags and if the
|
||||||
|
media's filepath contains one of those tags an assigns the label dynamically.
|
||||||
|
Author: DaTurkeyslayer + SwiftPanda16 + Blacktwin
|
||||||
|
Requires: plexapi
|
||||||
|
Usage:
|
||||||
|
python add_label_recently_added.py --rating_key 1234 --tags 'John,Jane,Alice,4K'
|
||||||
|
|
||||||
|
Tautulli script trigger:
|
||||||
|
* Notify on recently added
|
||||||
|
Tautulli script conditions:
|
||||||
|
* Filter which media to add labels to using conditions. Examples:
|
||||||
|
[ Media Type | is | movie ]
|
||||||
|
[ Show Name | is | Game of Thrones ]
|
||||||
|
[ Album Name | is | Reputation ]
|
||||||
|
[ Video Resolution | is | 4k ]
|
||||||
|
[ Genre | contains | horror ]
|
||||||
|
Tautulli script arguments:
|
||||||
|
* Recently Added:
|
||||||
|
--rating_key {rating_key} --tagsList John,Jane,Alice
|
||||||
|
'''
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import plexapi
|
||||||
|
from plexapi.server import PlexServer
|
||||||
|
|
||||||
|
# ## OVERRIDES - ONLY EDIT IF RUNNING SCRIPT WITHOUT TAUTULLI ##
|
||||||
|
|
||||||
|
PLEX_URL = ''
|
||||||
|
PLEX_TOKEN = ''
|
||||||
|
|
||||||
|
# Environmental Variables
|
||||||
|
PLEX_URL = PLEX_URL or os.getenv('PLEX_URL', PLEX_URL)
|
||||||
|
PLEX_TOKEN = PLEX_TOKEN or os.getenv('PLEX_TOKEN', PLEX_TOKEN)
|
||||||
|
|
||||||
|
def add_label_parent(plex, rating_key, tags):
|
||||||
|
item = plex.fetchItem(rating_key)
|
||||||
|
|
||||||
|
if item.type in ('movie', 'show', 'album'):
|
||||||
|
mediaRecord = item
|
||||||
|
elif item.type in ('episode'):
|
||||||
|
mediaRecord = item.show()
|
||||||
|
elif item.type == 'track':
|
||||||
|
mediaRecord = item.album()
|
||||||
|
else:
|
||||||
|
print(f"Cannot add label to '{item.title}' ({item.ratingKey}): Invalid media type '{item.type}'")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Get all of the items filepaths and save them to a list
|
||||||
|
filepaths = item.locations
|
||||||
|
|
||||||
|
# Loop through each filepath for the item
|
||||||
|
for filepath in filepaths:
|
||||||
|
# Loop through each tag to check if it is in the current filepath
|
||||||
|
for tag in tags:
|
||||||
|
# Check if the tag is in the filepath
|
||||||
|
if tag.lower() in filepath.lower():
|
||||||
|
# Use the found tag to dynamically assign the label
|
||||||
|
dynamic_label = tag + "'s"
|
||||||
|
|
||||||
|
# Check if the label already exists
|
||||||
|
existing_labels = [label.tag for label in mediaRecord.labels]
|
||||||
|
|
||||||
|
if dynamic_label not in existing_labels:
|
||||||
|
# Create the label if it doesn't exist
|
||||||
|
mediaRecord.addLabel(dynamic_label)
|
||||||
|
print(f"Adding label '{dynamic_label}' to '{mediaRecord.title}' ({mediaRecord.ratingKey})")
|
||||||
|
else:
|
||||||
|
print(f"No matching tag found in any of the file paths for '{mediaRecord.title}' ({mediaRecord.ratingKey})")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--rating_key', required=True, type=int)
|
||||||
|
parser.add_argument('--tagsList', type=str, required=True, help='Comma-separated list of tags')
|
||||||
|
opts = parser.parse_args()
|
||||||
|
|
||||||
|
# Parse comma-separated tags
|
||||||
|
tags = [tag.strip() for tag in opts.tagsList.split(',')] if opts.tagsList else []
|
||||||
|
|
||||||
|
plex = PlexServer(PLEX_URL, PLEX_TOKEN)
|
||||||
|
add_label_parent(plex, opts.rating_key, tags)
|
Loading…
Reference in New Issue
Block a user