mirror of
https://github.com/meisnate12/Plex-Meta-Manager
synced 2024-11-22 04:23:08 +00:00
add --read-only-config command line argument
This commit is contained in:
parent
6871587bb6
commit
c86def351e
7 changed files with 25 additions and 10 deletions
|
@ -13,6 +13,8 @@ libraries: # Library mappings must have a c
|
|||
metadata_path:
|
||||
- file: config/Anime.yml # You have to create this file the other is online
|
||||
- git: meisnate12/AnimeCharts
|
||||
playlist_files:
|
||||
- file: config/playlists.yml
|
||||
settings: # Can be individually specified per library as well
|
||||
cache: true
|
||||
cache_expiration: 60
|
||||
|
|
|
@ -163,7 +163,7 @@ custom_sort_builders = [
|
|||
"trakt_recommended_daily", "trakt_recommended_weekly", "trakt_recommended_monthly", "trakt_recommended_yearly", "trakt_recommended_all",
|
||||
"trakt_watched_daily", "trakt_watched_weekly", "trakt_watched_monthly", "trakt_watched_yearly", "trakt_watched_all",
|
||||
"tautulli_popular", "tautulli_watched", "letterboxd_list", "icheckmovies_list",
|
||||
"anilist_top_rated", "anilist_popular", "anilist_season", "anilist_studio", "anilist_genre", "anilist_tag", "anilist_search",
|
||||
"anilist_top_rated", "anilist_popular", "anilist_trending", "anilist_search",
|
||||
"mal_all", "mal_airing", "mal_upcoming", "mal_tv", "mal_movie", "mal_ova", "mal_special",
|
||||
"mal_popular", "mal_favorite", "mal_suggested", "mal_userlist", "mal_season", "mal_genre", "mal_studio"
|
||||
]
|
||||
|
|
|
@ -33,7 +33,7 @@ sync_modes = {"append": "Only Add Items to the Collection or Playlist", "sync":
|
|||
mass_update_options = {"tmdb": "Use TMDb Metadata", "omdb": "Use IMDb Metadata through OMDb"}
|
||||
|
||||
class ConfigFile:
|
||||
def __init__(self, default_dir, attrs):
|
||||
def __init__(self, default_dir, attrs, read_only=False):
|
||||
logger.info("Locating config...")
|
||||
config_file = attrs["config_file"]
|
||||
if config_file and os.path.exists(config_file): self.config_path = os.path.abspath(config_file)
|
||||
|
@ -43,6 +43,7 @@ class ConfigFile:
|
|||
logger.info(f"Using {self.config_path} as config")
|
||||
|
||||
self.default_dir = default_dir
|
||||
self.read_only = read_only
|
||||
self.test_mode = attrs["test"] if "test" in attrs else False
|
||||
self.trace_mode = attrs["trace"] if "trace" in attrs else False
|
||||
self.start_time = attrs["time_obj"]
|
||||
|
@ -121,7 +122,8 @@ class ConfigFile:
|
|||
if "sonarr" in new_config: new_config["sonarr"] = new_config.pop("sonarr")
|
||||
if "trakt" in new_config: new_config["trakt"] = new_config.pop("trakt")
|
||||
if "mal" in new_config: new_config["mal"] = new_config.pop("mal")
|
||||
yaml.round_trip_dump(new_config, open(self.config_path, "w", encoding="utf-8"), indent=None, block_seq_indent=2)
|
||||
if not read_only:
|
||||
yaml.round_trip_dump(new_config, open(self.config_path, "w", encoding="utf-8"), indent=None, block_seq_indent=2)
|
||||
self.data = new_config
|
||||
except yaml.scanner.ScannerError as e:
|
||||
raise Failed(f"YAML Error: {util.tab_new_lines(e)}")
|
||||
|
@ -138,6 +140,8 @@ class ConfigFile:
|
|||
data = None
|
||||
do_print = False
|
||||
save = False
|
||||
if self.read_only:
|
||||
save = False
|
||||
text = f"{attribute} attribute" if parent is None else f"{parent} sub-attribute {attribute}"
|
||||
if data is None or attribute not in data:
|
||||
message = f"{text} not found"
|
||||
|
|
|
@ -108,7 +108,7 @@ class MyAnimeList:
|
|||
|
||||
def _save(self, authorization):
|
||||
if authorization is not None and "access_token" in authorization and authorization["access_token"] and self._check(authorization):
|
||||
if self.authorization != authorization:
|
||||
if self.authorization != authorization and self.config.read_only:
|
||||
yaml.YAML().allow_duplicate_keys = True
|
||||
config, ind, bsi = yaml.util.load_yaml_guess_indent(open(self.config_path))
|
||||
config["mal"]["authorization"] = {
|
||||
|
|
|
@ -120,12 +120,18 @@ class DataFile:
|
|||
else:
|
||||
raise Failed(f"{self.data_type} Error: template sub-attribute optional is blank")
|
||||
|
||||
if "move_collection_prefix" in template:
|
||||
if template["move_collection_prefix"]:
|
||||
for op in util.get_list(template["move_collection_prefix"]):
|
||||
if "move_prefix" in template or "move_collection_prefix" in template:
|
||||
prefix = None
|
||||
if "move_prefix" in template:
|
||||
prefix = template["move_prefix"]
|
||||
elif "move_collection_prefix" in template:
|
||||
logger.warning(f"{self.data_type} Error: template sub-attribute move_collection_prefix will run as move_prefix")
|
||||
prefix = template["move_collection_prefix"]
|
||||
if prefix:
|
||||
for op in util.get_list(prefix):
|
||||
variables["collection_name"] = variables["collection_name"].replace(f"{str(op).strip()} ", "") + f", {str(op).strip()}"
|
||||
else:
|
||||
raise Failed(f"{self.data_type} Error: template sub-attribute move_collection_prefix is blank")
|
||||
raise Failed(f"{self.data_type} Error: template sub-attribute move_prefix is blank")
|
||||
|
||||
def check_data(_method, _data):
|
||||
if isinstance(_data, dict):
|
||||
|
@ -177,7 +183,7 @@ class DataFile:
|
|||
|
||||
new_attributes = {}
|
||||
for method_name, attr_data in template.items():
|
||||
if method_name not in data and method_name not in ["default", "optional", "move_collection_prefix"]:
|
||||
if method_name not in data and method_name not in ["default", "optional", "move_collection_prefix", "move_prefix"]:
|
||||
if attr_data is None:
|
||||
logger.error(f"Template Error: template attribute {method_name} is blank")
|
||||
continue
|
||||
|
|
|
@ -80,7 +80,7 @@ class Trakt:
|
|||
|
||||
def _save(self, authorization):
|
||||
if authorization and self._check(authorization):
|
||||
if self.authorization != authorization:
|
||||
if self.authorization != authorization and self.config.read_only:
|
||||
yaml.YAML().allow_duplicate_keys = True
|
||||
config, ind, bsi = yaml.util.load_yaml_guess_indent(open(self.config_path))
|
||||
config["trakt"]["authorization"] = {
|
||||
|
|
|
@ -34,6 +34,7 @@ parser.add_argument("-rc", "-cl", "--collection", "--collections", "--run-collec
|
|||
parser.add_argument("-rl", "-l", "--library", "--libraries", "--run-library", "--run-libraries", dest="libraries", help="Process only specified libraries (comma-separated list)", type=str)
|
||||
parser.add_argument("-nc", "--no-countdown", dest="no_countdown", help="Run without displaying the countdown", action="store_true", default=False)
|
||||
parser.add_argument("-nm", "--no-missing", dest="no_missing", help="Run without running the missing section", action="store_true", default=False)
|
||||
parser.add_argument("-ro", "--read-only-config", dest="read_only_config", help="Config must be read only", action="store_true", default=False)
|
||||
parser.add_argument("-d", "--divider", dest="divider", help="Character that divides the sections (Default: '=')", default="=", type=str)
|
||||
parser.add_argument("-w", "--width", dest="width", help="Screen Width (Default: 100)", default=100, type=int)
|
||||
args = parser.parse_args()
|
||||
|
@ -66,6 +67,7 @@ libraries = get_arg("PMM_LIBRARIES", args.libraries)
|
|||
resume = get_arg("PMM_RESUME", args.resume)
|
||||
no_countdown = get_arg("PMM_NO_COUNTDOWN", args.no_countdown, arg_bool=True)
|
||||
no_missing = get_arg("PMM_NO_MISSING", args.no_missing, arg_bool=True)
|
||||
read_only_config = get_arg("PMM_READ_ONLY_CONFIG", args.read_only_config, arg_bool=True)
|
||||
divider = get_arg("PMM_DIVIDER", args.divider)
|
||||
screen_width = get_arg("PMM_WIDTH", args.width, arg_int=True)
|
||||
debug = get_arg("PMM_DEBUG", args.debug, arg_bool=True)
|
||||
|
@ -153,6 +155,7 @@ def start(attrs):
|
|||
logger.debug(f"--resume (PMM_RESUME): {resume}")
|
||||
logger.debug(f"--no-countdown (PMM_NO_COUNTDOWN): {no_countdown}")
|
||||
logger.debug(f"--no-missing (PMM_NO_MISSING): {no_missing}")
|
||||
logger.debug(f"--read-only-config (PMM_READ_ONLY_CONFIG): {read_only_config}")
|
||||
logger.debug(f"--divider (PMM_DIVIDER): {divider}")
|
||||
logger.debug(f"--width (PMM_WIDTH): {screen_width}")
|
||||
logger.debug(f"--debug (PMM_DEBUG): {debug}")
|
||||
|
|
Loading…
Reference in a new issue