The original concept for Plex Meta Manager is [Plex Auto Collections](https://github.com/mza921/Plex-Auto-Collections), but this is rewritten from the ground up to be able to include a scheduler, metadata edits, multiple libraries, and logging. Plex Meta Manager is a Python 3 script that can be continuously run using YAML configuration files to update on a schedule the metadata of the movies, shows, and collections in your libraries as well as automatically build collections based on various methods all detailed in the wiki. Some collection examples that the script can automatically build and update daily include Plex Based Searches like actor, genre, or studio collections or Collections based on TMDb, IMDb, Trakt, TVDb, AniDB, or MyAnimeList lists and various other services.
The original concept for Plex Meta Manager is [Plex Auto Collections](https://github.com/mza921/Plex-Auto-Collections), but this is rewritten from the ground up to be able to include a scheduler, metadata edits, multiple libraries, and logging. Plex Meta Manager is a Python 3 script that can be continuously run using YAML configuration files to update on a schedule the metadata of the movies, shows, and collections in your libraries as well as automatically build collections based on various methods all detailed in the wiki. Some collection examples that the script can automatically build and update daily include Plex Based Searches like actor, genre, or studio collections or Collections based on TMDb, IMDb, Trakt, TVDb, AniDB, or MyAnimeList lists and various other services.
@ -17,6 +17,6 @@ The script is designed to work with most Metadata agents including the new Plex
* If you're getting an Error or have an Enhancement post in the [Issues](https://github.com/meisnate12/Plex-Meta-Manager/issues)
* If you're getting an Error or have an Enhancement post in the [Issues](https://github.com/meisnate12/Plex-Meta-Manager/issues)
* If you have a configuration question visit the [Discussions](https://github.com/meisnate12/Plex-Meta-Manager/discussions)
* If you have a configuration question visit the [Discussions](https://github.com/meisnate12/Plex-Meta-Manager/discussions)
* To see user submited Metadata configuration files and you could even add your own go to the [Plex Meta Manager Configs](https://github.com/meisnate12/Plex-Meta-Manager-Configs)
* To see user submitted Metadata configuration files and you could even add your own go to the [Plex Meta Manager Configs](https://github.com/meisnate12/Plex-Meta-Manager-Configs)
* Pull Request are welcome
* Pull Request are welcome
* [Buy Me a Pizza](https://www.buymeacoffee.com/meisnate12)
* [Buy Me a Pizza](https://www.buymeacoffee.com/meisnate12)
self.general["plex"]["sync_mode"]=check_for_attribute(self.data,"sync_mode",parent="plex",default="append",test_list=["append","sync"],options="| \tappend (Only Add Items to the Collection)\n| \tsync (Add & Remove Items from the Collection)")if"plex"inself.dataelse"append"
self.general["plex"]["sync_mode"]=check_for_attribute(self.data,"sync_mode",parent="plex",default="append",test_list=["append","sync"],options="| \tappend (Only Add Items to the Collection)\n| \tsync (Add & Remove Items from the Collection)")if"plex"inself.dataelse"append"
logger.warning("Config Warning: plex sub-attribute show_unmanaged_collections must be either true or false using general value: {}".format(self.general["plex"]["show_unmanaged_collections"]))
logger.warning("Config Warning: plex sub-attribute show_unmanaged must be either true or false using general value: {}".format(self.general["plex"]["show_unmanaged"]))
else:
else:
logger.warning("Config Warning: radarr sub-attribute add is blank using general value: {}".format(self.general["radarr"]["add"]))
logger.warning("Config Warning: plex sub-attribute show_unmanaged is blank using general value: {}".format(self.general["plex"]["show_unmanaged"]))
logger.warning("Config Warning: plex sub-attribute show_filtered must be either true or false using general value: {}".format(self.general["plex"]["show_filtered"]))
else:
logger.warning("Config Warning: plex sub-attribute show_filtered is blank using general value: {}".format(self.general["plex"]["show_filtered"]))
if"sort_by"notincollections[c][m]:logger.warning("Collection Error: mal_season sort_by attribute not found using members as default")
if"sort_by"notincollections[c][m]:logger.warning("Collection Warning: mal_season sort_by attribute not found using members as default")
elifnotcollections[c][m]["sort_by"]:logger.warning("Collection Error: mal_season sort_by attribute is blank using members as default")
elifnotcollections[c][m]["sort_by"]:logger.warning("Collection Warning: mal_season sort_by attribute is blank using members as default")
elifcollections[c][m]["sort_by"]notinutil.mal_season_sort:logger.warning("Collection Error: mal_season sort_by attribute {} invalid must be either 'members' or 'score' using members as default".format(collections[c][m]["sort_by"]))
elifcollections[c][m]["sort_by"]notinutil.mal_season_sort:logger.warning("Collection Warning: mal_season sort_by attribute {} invalid must be either 'members' or 'score' using members as default".format(collections[c][m]["sort_by"]))
if"season"notincollections[c][m]:logger.warning("Collection Error: mal_season season attribute not found using the current season: {} as default".format(new_dictionary["season"]))
if"season"notincollections[c][m]:logger.warning("Collection Warning: mal_season season attribute not found using the current season: {} as default".format(new_dictionary["season"]))
elifnotcollections[c][m]["season"]:logger.warning("Collection Error: mal_season season attribute is blank using the current season: {} as default".format(new_dictionary["season"]))
elifnotcollections[c][m]["season"]:logger.warning("Collection Warning: mal_season season attribute is blank using the current season: {} as default".format(new_dictionary["season"]))
elifcollections[c][m]["season"]notinutil.pretty_seasons:logger.warning("Collection Error: mal_season season attribute {} invalid must be either 'winter', 'spring', 'summer' or 'fall' using the current season: {} as default".format(collections[c][m]["season"],new_dictionary["season"]))
elifcollections[c][m]["season"]notinutil.pretty_seasons:logger.warning("Collection Warning: mal_season season attribute {} invalid must be either 'winter', 'spring', 'summer' or 'fall' using the current season: {} as default".format(collections[c][m]["season"],new_dictionary["season"]))
if"status"notincollections[c][m]:logger.warning("Collection Error: mal_season status attribute not found using all as default")
if"status"notincollections[c][m]:logger.warning("Collection Warning: mal_season status attribute not found using all as default")
elifnotcollections[c][m]["status"]:logger.warning("Collection Error: mal_season status attribute is blank using all as default")
elifnotcollections[c][m]["status"]:logger.warning("Collection Warning: mal_season status attribute is blank using all as default")
elifcollections[c][m]["status"]notinutil.mal_userlist_status:logger.warning("Collection Error: mal_season status attribute {} invalid must be either 'all', 'watching', 'completed', 'on_hold', 'dropped' or 'plan_to_watch' using all as default".format(collections[c][m]["status"]))
elifcollections[c][m]["status"]notinutil.mal_userlist_status:logger.warning("Collection Warning: mal_season status attribute {} invalid must be either 'all', 'watching', 'completed', 'on_hold', 'dropped' or 'plan_to_watch' using all as default".format(collections[c][m]["status"]))
if"sort_by"notincollections[c][m]:logger.warning("Collection Error: mal_season sort_by attribute not found using score as default")
if"sort_by"notincollections[c][m]:logger.warning("Collection Warning: mal_season sort_by attribute not found using score as default")
elifnotcollections[c][m]["sort_by"]:logger.warning("Collection Error: mal_season sort_by attribute is blank using score as default")
elifnotcollections[c][m]["sort_by"]:logger.warning("Collection Warning: mal_season sort_by attribute is blank using score as default")
elifcollections[c][m]["sort_by"]notinutil.mal_userlist_sort:logger.warning("Collection Error: mal_season sort_by attribute {} invalid must be either 'score', 'last_updated', 'title' or 'start_date' using score as default".format(collections[c][m]["sort_by"]))
elifcollections[c][m]["sort_by"]notinutil.mal_userlist_sort:logger.warning("Collection Warning: mal_season sort_by attribute {} invalid must be either 'score', 'last_updated', 'title' or 'start_date' using score as default".format(collections[c][m]["sort_by"]))