mirror of
https://github.com/meisnate12/Plex-Meta-Manager
synced 2024-11-26 22:40:26 +00:00
#286 added .regex to String Filters
This commit is contained in:
parent
ff0bc2665c
commit
ca715094aa
1 changed files with 30 additions and 12 deletions
|
@ -158,19 +158,19 @@ boolean_details = [
|
|||
all_filters = [
|
||||
"actor", "actor.not",
|
||||
"audio_language", "audio_language.not",
|
||||
"audio_track_title", "audio_track_title.not", "audio_track_title.begins", "audio_track_title.ends",
|
||||
"audio_track_title", "audio_track_title.not", "audio_track_title.begins", "audio_track_title.ends", "audio_track_title.regex",
|
||||
"collection", "collection.not",
|
||||
"content_rating", "content_rating.not",
|
||||
"country", "country.not",
|
||||
"director", "director.not",
|
||||
"filepath", "filepath.not",
|
||||
"filepath", "filepath.not", "filepath.begins", "filepath.ends", "filepath.regex",
|
||||
"genre", "genre.not",
|
||||
"label", "label.not",
|
||||
"producer", "producer.not",
|
||||
"release", "release.not", "release.before", "release.after",
|
||||
"added", "added.not", "added.before", "added.after",
|
||||
"last_played", "last_played.not", "last_played.before", "last_played.after",
|
||||
"title", "title.not", "title.begins", "title.ends",
|
||||
"title", "title.not", "title.begins", "title.ends", "title.regex",
|
||||
"plays.gt", "plays.gte", "plays.lt", "plays.lte",
|
||||
"tmdb_vote_count.gt", "tmdb_vote_count.gte", "tmdb_vote_count.lt", "tmdb_vote_count.lte",
|
||||
"duration.gt", "duration.gte", "duration.lt", "duration.lte",
|
||||
|
@ -178,7 +178,7 @@ all_filters = [
|
|||
"user_rating.gt", "user_rating.gte", "user_rating.lt", "user_rating.lte",
|
||||
"audience_rating.gt", "audience_rating.gte", "audience_rating.lt", "audience_rating.lte",
|
||||
"critic_rating.gt", "critic_rating.gte", "critic_rating.lt", "critic_rating.lte",
|
||||
"studio", "studio.not", "studio.begins", "studio.ends",
|
||||
"studio", "studio.not", "studio.begins", "studio.ends", "studio.regex",
|
||||
"subtitle_language", "subtitle_language.not",
|
||||
"resolution", "resolution.not",
|
||||
"writer", "writer.not",
|
||||
|
@ -186,7 +186,7 @@ all_filters = [
|
|||
]
|
||||
movie_only_filters = [
|
||||
"audio_language", "audio_language.not",
|
||||
"audio_track_title", "audio_track_title.not", "audio_track_title.begins", "audio_track_title.ends",
|
||||
"audio_track_title", "audio_track_title.not", "audio_track_title.begins", "audio_track_title.ends", "audio_track_title.regex",
|
||||
"country", "country.not",
|
||||
"director", "director.not",
|
||||
"duration.gt", "duration.gte", "duration.lt", "duration.lte",
|
||||
|
@ -1259,7 +1259,22 @@ class CollectionBuilder:
|
|||
def validate_attribute(self, attribute, modifier, final, data, validate, pairs=False):
|
||||
def smart_pair(list_to_pair):
|
||||
return [(t, t) for t in list_to_pair] if pairs else list_to_pair
|
||||
if attribute in ["title", "studio", "episode_title", "audio_track_title"] and modifier in ["", ".not", ".begins", ".ends"]:
|
||||
if modifier == ".regex":
|
||||
regex_list = util.get_list(data, split=False)
|
||||
valid_regex = []
|
||||
for reg in regex_list:
|
||||
try:
|
||||
re.compile(reg)
|
||||
valid_regex.append(reg)
|
||||
except re.error:
|
||||
util.print_stacktrace()
|
||||
err = f"Regex Error: Regular Expression Invalid: {reg}"
|
||||
if validate:
|
||||
raise Failed(err)
|
||||
else:
|
||||
logger.error(err)
|
||||
return valid_regex
|
||||
elif attribute in ["title", "studio", "episode_title", "audio_track_title"] and modifier in ["", ".not", ".begins", ".ends"]:
|
||||
return smart_pair(util.get_list(data, split=False))
|
||||
elif attribute == "original_language":
|
||||
return util.get_list(data, lower=True)
|
||||
|
@ -1376,13 +1391,14 @@ class CollectionBuilder:
|
|||
title = audio.title if audio.title else ""
|
||||
if (modifier in ["", ".not"] and check_title.lower() in title.lower()) \
|
||||
or (modifier == ".begins" and title.lower().startswith(check_title.lower())) \
|
||||
or (modifier == ".ends" and title.lower().endswith(check_title.lower())):
|
||||
or (modifier == ".ends" and title.lower().endswith(check_title.lower())) \
|
||||
or (modifier == ".regex" and re.compile(check_title).match(title)):
|
||||
jailbreak = True
|
||||
break
|
||||
if jailbreak: break
|
||||
if jailbreak: break
|
||||
if jailbreak: break
|
||||
if (jailbreak and modifier == ".not") or (not jailbreak and modifier in ["", ".begins", ".ends"]):
|
||||
if (jailbreak and modifier == ".not") or (not jailbreak and modifier in ["", ".begins", ".ends", ".regex"]):
|
||||
return False
|
||||
elif filter_attr == "filepath":
|
||||
jailbreak = False
|
||||
|
@ -1390,11 +1406,12 @@ class CollectionBuilder:
|
|||
for check_text in filter_data:
|
||||
if (modifier in ["", ".not"] and check_text.lower() in location.lower()) \
|
||||
or (modifier == ".begins" and location.lower().startswith(check_text.lower())) \
|
||||
or (modifier == ".ends" and location.lower().endswith(check_text.lower())):
|
||||
or (modifier == ".ends" and location.lower().endswith(check_text.lower())) \
|
||||
or (modifier == ".regex" and re.compile(check_text).match(location)):
|
||||
jailbreak = True
|
||||
break
|
||||
if jailbreak: break
|
||||
if (jailbreak and modifier == ".not") or (not jailbreak and modifier in ["", ".begins", ".ends"]):
|
||||
if (jailbreak and modifier == ".not") or (not jailbreak and modifier in ["", ".begins", ".ends", ".regex"]):
|
||||
return False
|
||||
elif filter_attr in ["title", "studio"]:
|
||||
jailbreak = False
|
||||
|
@ -1402,10 +1419,11 @@ class CollectionBuilder:
|
|||
for check_data in filter_data:
|
||||
if (modifier in ["", ".not"] and check_data.lower() in current_data.lower()) \
|
||||
or (modifier == ".begins" and current_data.lower().startswith(check_data.lower())) \
|
||||
or (modifier == ".ends" and current_data.lower().endswith(check_data.lower())):
|
||||
or (modifier == ".ends" and current_data.lower().endswith(check_data.lower())) \
|
||||
or (modifier == ".regex" and re.compile(check_data).match(current_data)):
|
||||
jailbreak = True
|
||||
break
|
||||
if (jailbreak and modifier == ".not") or (not jailbreak and modifier in ["", ".begins", ".ends"]):
|
||||
if (jailbreak and modifier == ".not") or (not jailbreak and modifier in ["", ".begins", ".ends", ".regex"]):
|
||||
return False
|
||||
elif filter_attr == "original_language":
|
||||
movie = None
|
||||
|
|
Loading…
Reference in a new issue