[10] library level template variables

pull/909/head
meisnate12 3 years ago
parent 2f79f2f7ae
commit 3a655c6d5a

@ -1 +1 @@
1.17.0-develop9 1.17.0-develop10

@ -78,19 +78,20 @@ radarr:
The available attributes for each library are as follows: The available attributes for each library are as follows:
| Attribute | Values | Default | Required | | Attribute | Values | Default | Required |
|:-------------------------------------------|:------------------------------------------------------------------------------------------------------|:-------------------------------------:|:-------------------------------:| |:--------------------------------------------|:------------------------------------------------------------------------------------------------------|:-------------------------------------:|:-------------------------------:|
| [`library_name`](#library-name) | Library name (required only when trying to use multiple libraries with the same name) | Base Attribute Name | ❌ | | [`library_name`](#library-name) | Library name (required only when trying to use multiple libraries with the same name) | Base Attribute Name | ❌ |
| [`metadata_path`](#metadata-path) | Location of Metadata YAML files | `/config/<<MAPPING_NAME>>.yml` | &#10060; | | [`metadata_path`](#metadata-path) | Location of Metadata YAML files | `/config/<<MAPPING_NAME>>.yml` | &#10060; |
| [`overlay_path`](#overlay-path) | Location of Overlay YAML files | None | &#10060; | | [`overlay_path`](#overlay-path) | Location of Overlay YAML files | None | &#10060; |
| [`report_path`](#report-path) | Location to create the YAML file listing added, removed, filtered, and missing items for this library | `/config/<<MAPPING_NAME>>_report.yml` | &#10060; | | [`report_path`](#report-path) | Location to create the YAML file listing added, removed, filtered, and missing items for this library | `/config/<<MAPPING_NAME>>_report.yml` | &#10060; |
| [`schedule`](../metadata/details/schedule) | Use any [schedule option](../metadata/details/schedule) to control when this library is run. | daily | &#10060; | | [`template_variables`](#template-variables) | Library template variables to be applied to every Metadata and Overlay file run. | N/A | &#10060; |
| [`operations`](operations) | Library Operations to run | N/A | &#10060; | | [`schedule`](../metadata/details/schedule) | Use any [schedule option](../metadata/details/schedule) to control when this library is run. | daily | &#10060; |
| [`settings`](settings) | Any `setting` attribute that overrides a global value | global | &#10060; | | [`operations`](operations) | Library Operations to run | N/A | &#10060; |
| [`plex`](plex) | Any `plex` attribute that overrides a global value | global | &#9989; Either here or globally | | [`settings`](settings) | Any `setting` attribute that overrides a global value | global | &#10060; |
| [`radarr`](radarr) | Any `radarr` attribute that overrides a global value | global | &#10060; | | [`plex`](plex) | Any `plex` attribute that overrides a global value | global | &#9989; Either here or globally |
| [`sonarr`](sonarr) | Any `sonarr` attribute that overrides a global value | global | &#10060; | | [`radarr`](radarr) | Any `radarr` attribute that overrides a global value | global | &#10060; |
| [`tautulli`](tautulli) | Any `tautulli` attribute that overrides a global value | global | &#10060; | | [`sonarr`](sonarr) | Any `sonarr` attribute that overrides a global value | global | &#10060; |
| [`tautulli`](tautulli) | Any `tautulli` attribute that overrides a global value | global | &#10060; |
### Library Name ### Library Name
@ -189,6 +190,17 @@ libraries:
report_path: /config/reports/Movies.yml report_path: /config/reports/Movies.yml
``` ```
### Template Variables
Library template variables to be applied to every Metadata and Overlay file run.
```yaml
libraries:
Movies:
template_variable:
collection_mode: true
```
## Playlist Files Attribute ## Playlist Files Attribute
As playlists are not tied to one specific library and can combine media from multiple libraries, they require their own special [Playlist Files](../metadata/metadata) to work. As playlists are not tied to one specific library and can combine media from multiple libraries, they require their own special [Playlist Files](../metadata/metadata) to work.

@ -730,16 +730,20 @@ class ConfigFile:
if self.Trakt is None and params["mass_trakt_rating_update"]: if self.Trakt is None and params["mass_trakt_rating_update"]:
error_check("mass_trakt_rating_update", "Trakt") error_check("mass_trakt_rating_update", "Trakt")
lib_vars = {}
if "template_variables" in lib and lib["template_variables"] and isinstance(lib["template_variables"], dict):
lib_vars = lib["template_variables"]
try: try:
if lib and "metadata_path" in lib: if lib and "metadata_path" in lib:
if not lib["metadata_path"]: if not lib["metadata_path"]:
raise Failed("Config Error: metadata_path attribute is blank") raise Failed("Config Error: metadata_path attribute is blank")
files = util.load_files(lib["metadata_path"], "metadata_path", schedule=(current_time, self.run_hour, self.ignore_schedules)) files = util.load_files(lib["metadata_path"], "metadata_path", schedule=(current_time, self.run_hour, self.ignore_schedules), lib_vars=lib_vars)
if not files: if not files:
raise Failed("Config Error: No Paths Found for metadata_path") raise Failed("Config Error: No Paths Found for metadata_path")
params["metadata_path"] = files params["metadata_path"] = files
elif os.path.exists(os.path.join(default_dir, f"{library_name}.yml")): elif os.path.exists(os.path.join(default_dir, f"{library_name}.yml")):
params["metadata_path"] = [("File", os.path.join(default_dir, f"{library_name}.yml"), {}, None)] params["metadata_path"] = [("File", os.path.join(default_dir, f"{library_name}.yml"), lib_vars, None)]
else: else:
params["metadata_path"] = [] params["metadata_path"] = []
params["default_dir"] = default_dir params["default_dir"] = default_dir
@ -761,7 +765,7 @@ class ConfigFile:
try: try:
if not lib["overlay_path"]: if not lib["overlay_path"]:
raise Failed("Config Error: overlay_path attribute is blank") raise Failed("Config Error: overlay_path attribute is blank")
files = util.load_files(lib["overlay_path"], "overlay_path") files = util.load_files(lib["overlay_path"], "overlay_path", lib_vars=lib_vars)
if not files: if not files:
raise Failed("Config Error: No Paths Found for overlay_path") raise Failed("Config Error: No Paths Found for overlay_path")
for file in util.get_list(lib["overlay_path"], split=False): for file in util.get_list(lib["overlay_path"], split=False):

@ -119,16 +119,16 @@ class Operations:
batch_display += f"\n{self.library.edit_tags('label', item, add_tags=add_labels, remove_tags=remove_labels, do_print=False)}" batch_display += f"\n{self.library.edit_tags('label', item, add_tags=add_labels, remove_tags=remove_labels, do_print=False)}"
except Failed: except Failed:
pass pass
if item.locations:
path = os.path.dirname(str(item.locations[0])) if self.library.is_movie else str(item.locations[0]) path = os.path.dirname(str(item.locations[0])) if self.library.is_movie else str(item.locations[0])
if self.library.Radarr and self.library.radarr_add_all_existing and tmdb_id: if self.library.Radarr and self.library.radarr_add_all_existing and tmdb_id:
path = path.replace(self.library.Radarr.plex_path, self.library.Radarr.radarr_path) path = path.replace(self.library.Radarr.plex_path, self.library.Radarr.radarr_path)
path = path[:-1] if path.endswith(('/', '\\')) else path path = path[:-1] if path.endswith(('/', '\\')) else path
radarr_adds.append((tmdb_id, path)) radarr_adds.append((tmdb_id, path))
if self.library.Sonarr and self.library.sonarr_add_all_existing and tvdb_id: if self.library.Sonarr and self.library.sonarr_add_all_existing and tvdb_id:
path = path.replace(self.library.Sonarr.plex_path, self.library.Sonarr.sonarr_path) path = path.replace(self.library.Sonarr.plex_path, self.library.Sonarr.sonarr_path)
path = path[:-1] if path.endswith(("/", "\\")) else path path = path[:-1] if path.endswith(("/", "\\")) else path
sonarr_adds.append((tvdb_id, path)) sonarr_adds.append((tvdb_id, path))
tmdb_item = None tmdb_item = None
if any([o == "tmdb" for o in self.library.meta_operations]): if any([o == "tmdb" for o in self.library.meta_operations]):

@ -380,13 +380,18 @@ def time_window(tw):
else: else:
return tw return tw
def load_files(files_to_load, method, schedule=None): def load_files(files_to_load, method, schedule=None, lib_vars=None):
files = [] files = []
if not lib_vars:
lib_vars = {}
for file in get_list(files_to_load, split=False): for file in get_list(files_to_load, split=False):
if isinstance(file, dict): if isinstance(file, dict):
temp_vars = {} temp_vars = {}
if "template_variables" in file and file["template_variables"] and isinstance(file["template_variables"], dict): if "template_variables" in file and file["template_variables"] and isinstance(file["template_variables"], dict):
temp_vars = file["template_variables"] temp_vars = file["template_variables"]
for k, v in lib_vars.items():
if k not in temp_vars:
temp_vars[k] = v
asset_directory = [] asset_directory = []
if "asset_directory" in file and file["asset_directory"]: if "asset_directory" in file and file["asset_directory"]:
for asset_path in get_list(file["asset_directory"], split=False): for asset_path in get_list(file["asset_directory"], split=False):

Loading…
Cancel
Save