mirror of
https://github.com/meisnate12/Plex-Meta-Manager
synced 2024-11-14 00:37:22 +00:00
#390 Add .is and .isnot to String searches and filters
This commit is contained in:
parent
5c1e40aeef
commit
9190b30a47
3 changed files with 14 additions and 24 deletions
|
@ -94,12 +94,12 @@ sonarr_details = [
|
||||||
all_filters = [
|
all_filters = [
|
||||||
"actor", "actor.not",
|
"actor", "actor.not",
|
||||||
"audio_language", "audio_language.not",
|
"audio_language", "audio_language.not",
|
||||||
"audio_track_title", "audio_track_title.not", "audio_track_title.begins", "audio_track_title.ends", "audio_track_title.regex",
|
"audio_track_title", "audio_track_title.not", "audio_track_title.is", "audio_track_title.isnot", "audio_track_title.begins", "audio_track_title.ends", "audio_track_title.regex",
|
||||||
"collection", "collection.not",
|
"collection", "collection.not",
|
||||||
"content_rating", "content_rating.not",
|
"content_rating", "content_rating.not",
|
||||||
"country", "country.not",
|
"country", "country.not",
|
||||||
"director", "director.not",
|
"director", "director.not",
|
||||||
"filepath", "filepath.not", "filepath.begins", "filepath.ends", "filepath.regex",
|
"filepath", "filepath.not", "filepath.is", "filepath.isnot", "filepath.begins", "filepath.ends", "filepath.regex",
|
||||||
"genre", "genre.not",
|
"genre", "genre.not",
|
||||||
"label", "label.not",
|
"label", "label.not",
|
||||||
"producer", "producer.not",
|
"producer", "producer.not",
|
||||||
|
@ -108,7 +108,7 @@ all_filters = [
|
||||||
"last_played", "last_played.not", "last_played.before", "last_played.after", "last_played.regex",
|
"last_played", "last_played.not", "last_played.before", "last_played.after", "last_played.regex",
|
||||||
"first_episode_aired", "first_episode_aired.not", "first_episode_aired.before", "first_episode_aired.after", "first_episode_aired.regex",
|
"first_episode_aired", "first_episode_aired.not", "first_episode_aired.before", "first_episode_aired.after", "first_episode_aired.regex",
|
||||||
"last_episode_aired", "last_episode_aired.not", "last_episode_aired.before", "last_episode_aired.after", "last_episode_aired.regex",
|
"last_episode_aired", "last_episode_aired.not", "last_episode_aired.before", "last_episode_aired.after", "last_episode_aired.regex",
|
||||||
"title", "title.not", "title.begins", "title.ends", "title.regex",
|
"title", "title.not", "title.is", "title.isnot", "title.begins", "title.ends", "title.regex",
|
||||||
"plays.gt", "plays.gte", "plays.lt", "plays.lte",
|
"plays.gt", "plays.gte", "plays.lt", "plays.lte",
|
||||||
"tmdb_vote_count.gt", "tmdb_vote_count.gte", "tmdb_vote_count.lt", "tmdb_vote_count.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",
|
"duration.gt", "duration.gte", "duration.lt", "duration.lte",
|
||||||
|
@ -116,7 +116,7 @@ all_filters = [
|
||||||
"user_rating.gt", "user_rating.gte", "user_rating.lt", "user_rating.lte",
|
"user_rating.gt", "user_rating.gte", "user_rating.lt", "user_rating.lte",
|
||||||
"audience_rating.gt", "audience_rating.gte", "audience_rating.lt", "audience_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",
|
"critic_rating.gt", "critic_rating.gte", "critic_rating.lt", "critic_rating.lte",
|
||||||
"studio", "studio.not", "studio.begins", "studio.ends", "studio.regex",
|
"studio", "studio.not", "studio.is", "studio.isnot", "studio.begins", "studio.ends", "studio.regex",
|
||||||
"subtitle_language", "subtitle_language.not",
|
"subtitle_language", "subtitle_language.not",
|
||||||
"resolution", "resolution.not",
|
"resolution", "resolution.not",
|
||||||
"writer", "writer.not",
|
"writer", "writer.not",
|
||||||
|
@ -126,7 +126,7 @@ all_filters = [
|
||||||
tmdb_filters = ["original_language", "tmdb_vote_count", "tmdb_year", "first_episode_aired", "last_episode_aired"]
|
tmdb_filters = ["original_language", "tmdb_vote_count", "tmdb_year", "first_episode_aired", "last_episode_aired"]
|
||||||
movie_only_filters = [
|
movie_only_filters = [
|
||||||
"audio_language", "audio_language.not",
|
"audio_language", "audio_language.not",
|
||||||
"audio_track_title", "audio_track_title.not", "audio_track_title.begins", "audio_track_title.ends", "audio_track_title.regex",
|
"audio_track_title", "audio_track_title.not", "audio_track_title.is", "audio_track_title.isnot", "audio_track_title.begins", "audio_track_title.ends", "audio_track_title.regex",
|
||||||
"country", "country.not",
|
"country", "country.not",
|
||||||
"director", "director.not",
|
"director", "director.not",
|
||||||
"duration.gt", "duration.gte", "duration.lt", "duration.lte",
|
"duration.gt", "duration.gte", "duration.lt", "duration.lte",
|
||||||
|
@ -1383,7 +1383,7 @@ class CollectionBuilder:
|
||||||
else:
|
else:
|
||||||
logger.error(err)
|
logger.error(err)
|
||||||
return valid_regex
|
return valid_regex
|
||||||
elif attribute in ["title", "studio", "episode_title", "audio_track_title"] and modifier in ["", ".not", ".begins", ".ends"]:
|
elif attribute in ["title", "studio", "episode_title", "audio_track_title"] and modifier in ["", ".not", ".is", ".isnot", ".begins", ".ends"]:
|
||||||
return smart_pair(util.get_list(data, split=False))
|
return smart_pair(util.get_list(data, split=False))
|
||||||
elif attribute == "original_language":
|
elif attribute == "original_language":
|
||||||
return util.get_list(data, lower=True)
|
return util.get_list(data, lower=True)
|
||||||
|
|
|
@ -66,7 +66,7 @@ show_translation = {
|
||||||
"label": "show.label",
|
"label": "show.label",
|
||||||
}
|
}
|
||||||
modifier_translation = {
|
modifier_translation = {
|
||||||
"": "", ".not": "!", ".gt": "%3E%3E", ".gte": "%3E", ".lt": "%3C%3C", ".lte": "%3C",
|
"": "", ".not": "!", ".is": "%3D", ".isnot": "!%3D", ".gt": "%3E%3E", ".gte": "%3E", ".lt": "%3C%3C", ".lte": "%3C",
|
||||||
".before": "%3C%3C", ".after": "%3E%3E", ".begins": "%3C", ".ends": "%3E"
|
".before": "%3C%3C", ".after": "%3E%3E", ".begins": "%3C", ".ends": "%3E"
|
||||||
}
|
}
|
||||||
episode_sorting_options = {"default": "-1", "oldest": "0", "newest": "1"}
|
episode_sorting_options = {"default": "-1", "oldest": "0", "newest": "1"}
|
||||||
|
@ -101,8 +101,8 @@ item_advance_keys = {
|
||||||
}
|
}
|
||||||
new_plex_agents = ["tv.plex.agents.movie", "tv.plex.agents.series"]
|
new_plex_agents = ["tv.plex.agents.movie", "tv.plex.agents.series"]
|
||||||
searches = [
|
searches = [
|
||||||
"title", "title.not", "title.begins", "title.ends",
|
"title", "title.not", "title.is", "title.isnot", "title.begins", "title.ends",
|
||||||
"studio", "studio.not", "studio.begins", "studio.ends",
|
"studio", "studio.not", "studio.is", "studio.isnot", "studio.begins", "studio.ends",
|
||||||
"actor", "actor.not",
|
"actor", "actor.not",
|
||||||
"audio_language", "audio_language.not",
|
"audio_language", "audio_language.not",
|
||||||
"collection", "collection.not",
|
"collection", "collection.not",
|
||||||
|
@ -126,7 +126,7 @@ searches = [
|
||||||
"audience_rating.gt", "audience_rating.gte", "audience_rating.lt", "audience_rating.lte",
|
"audience_rating.gt", "audience_rating.gte", "audience_rating.lt", "audience_rating.lte",
|
||||||
"year", "year.not", "year.gt", "year.gte", "year.lt", "year.lte",
|
"year", "year.not", "year.gt", "year.gte", "year.lt", "year.lte",
|
||||||
"unplayed_episodes", "episode_unplayed", "episode_duplicate", "episode_progress", "episode_unmatched",
|
"unplayed_episodes", "episode_unplayed", "episode_duplicate", "episode_progress", "episode_unmatched",
|
||||||
"episode_title", "episode_title.not", "episode_title.begins", "episode_title.ends",
|
"episode_title", "episode_title.not", "episode_title.is", "episode_title.isnot", "episode_title.begins", "episode_title.ends",
|
||||||
"episode_added", "episode_added.not", "episode_added.before", "episode_added.after",
|
"episode_added", "episode_added.not", "episode_added.before", "episode_added.after",
|
||||||
"episode_air_date", "episode_air_date.not", "episode_air_date.before", "episode_air_date.after",
|
"episode_air_date", "episode_air_date.not", "episode_air_date.before", "episode_air_date.after",
|
||||||
"episode_last_played", "episode_last_played.not", "episode_last_played.before", "episode_last_played.after",
|
"episode_last_played", "episode_last_played.not", "episode_last_played.before", "episode_last_played.after",
|
||||||
|
@ -151,7 +151,7 @@ movie_only_searches = [
|
||||||
]
|
]
|
||||||
show_only_searches = [
|
show_only_searches = [
|
||||||
"network", "network.not",
|
"network", "network.not",
|
||||||
"episode_title", "episode_title.not", "episode_title.begins", "episode_title.ends",
|
"episode_title", "episode_title.not", "episode_title.is", "episode_title.isnot", "episode_title.begins", "episode_title.ends",
|
||||||
"episode_added", "episode_added.not", "episode_added.before", "episode_added.after",
|
"episode_added", "episode_added.not", "episode_added.before", "episode_added.after",
|
||||||
"episode_air_date", "episode_air_date.not",
|
"episode_air_date", "episode_air_date.not",
|
||||||
"episode_air_date.before", "episode_air_date.after",
|
"episode_air_date.before", "episode_air_date.after",
|
||||||
|
@ -170,17 +170,6 @@ tmdb_attributes = ["actor", "director", "producer", "writer"]
|
||||||
date_attributes = ["added", "episode_added", "release", "episode_air_date", "last_played", "episode_last_played", "first_episode_aired", "last_episode_aired"]
|
date_attributes = ["added", "episode_added", "release", "episode_air_date", "last_played", "episode_last_played", "first_episode_aired", "last_episode_aired"]
|
||||||
number_attributes = ["plays", "episode_plays", "duration", "tmdb_vote_count"] + date_attributes
|
number_attributes = ["plays", "episode_plays", "duration", "tmdb_vote_count"] + date_attributes
|
||||||
search_display = {"added": "Date Added", "release": "Release Date", "hdr": "HDR", "progress": "In Progress", "episode_progress": "Episode In Progress"}
|
search_display = {"added": "Date Added", "release": "Release Date", "hdr": "HDR", "progress": "In Progress", "episode_progress": "Episode In Progress"}
|
||||||
sorts = {
|
|
||||||
None: None,
|
|
||||||
"title.asc": "titleSort:asc", "title.desc": "titleSort:desc",
|
|
||||||
"originally_available.asc": "originallyAvailableAt:asc", "originally_available.desc": "originallyAvailableAt:desc",
|
|
||||||
"release.asc": "originallyAvailableAt:asc", "release.desc": "originallyAvailableAt:desc",
|
|
||||||
"critic_rating.asc": "rating:asc", "critic_rating.desc": "rating:desc",
|
|
||||||
"audience_rating.asc": "audienceRating:asc", "audience_rating.desc": "audienceRating:desc",
|
|
||||||
"duration.asc": "duration:asc", "duration.desc": "duration:desc",
|
|
||||||
"added.asc": "addedAt:asc", "added.desc": "addedAt:desc"
|
|
||||||
}
|
|
||||||
modifiers = {".not": "!", ".begins": "<", ".ends": ">", ".before": "<<", ".after": ">>", ".gt": ">>", ".gte": "__gte", ".lt": "<<", ".lte": "__lte"}
|
|
||||||
tags = [
|
tags = [
|
||||||
"actor", "audio_language", "collection", "content_rating", "country", "director", "genre", "label",
|
"actor", "audio_language", "collection", "content_rating", "country", "director", "genre", "label",
|
||||||
"network", "producer", "resolution", "studio", "subtitle_language", "writer"
|
"network", "producer", "resolution", "studio", "subtitle_language", "writer"
|
||||||
|
|
|
@ -49,7 +49,7 @@ days_alias = {
|
||||||
"sunday": 6, "sun": 6, "su": 6, "u": 6
|
"sunday": 6, "sun": 6, "su": 6, "u": 6
|
||||||
}
|
}
|
||||||
mod_displays = {
|
mod_displays = {
|
||||||
"": "is", ".not": "is not", ".begins": "begins with", ".ends": "ends with", ".before": "is before", ".after": "is after",
|
"": "is", ".not": "is not", ".is": "is", ".isnot": "is not", ".begins": "begins with", ".ends": "ends with", ".before": "is before", ".after": "is after",
|
||||||
".gt": "is greater than", ".gte": "is greater than or equal", ".lt": "is less than", ".lte": "is less than or equal"
|
".gt": "is greater than", ".gte": "is greater than or equal", ".lt": "is less than", ".lte": "is less than or equal"
|
||||||
}
|
}
|
||||||
pretty_days = {0: "Monday", 1: "Tuesday", 2: "Wednesday", 3: "Thursday", 4: "Friday", 5: "Saturday", 6: "Sunday"}
|
pretty_days = {0: "Monday", 1: "Tuesday", 2: "Wednesday", 3: "Thursday", 4: "Friday", 5: "Saturday", 6: "Sunday"}
|
||||||
|
@ -282,13 +282,14 @@ def is_string_filter(values, modifier, data):
|
||||||
for value in values:
|
for value in values:
|
||||||
for check_value in data:
|
for check_value in data:
|
||||||
if (modifier in ["", ".not"] and check_value.lower() in value.lower()) \
|
if (modifier in ["", ".not"] and check_value.lower() in value.lower()) \
|
||||||
|
or (modifier in [".is", ".isnot"] and value.lower() == check_value.lower()) \
|
||||||
or (modifier == ".begins" and value.lower().startswith(check_value.lower())) \
|
or (modifier == ".begins" and value.lower().startswith(check_value.lower())) \
|
||||||
or (modifier == ".ends" and value.lower().endswith(check_value.lower())) \
|
or (modifier == ".ends" and value.lower().endswith(check_value.lower())) \
|
||||||
or (modifier == ".regex" and re.compile(check_value).match(value)):
|
or (modifier == ".regex" and re.compile(check_value).match(value)):
|
||||||
jailbreak = True
|
jailbreak = True
|
||||||
break
|
break
|
||||||
if jailbreak: break
|
if jailbreak: break
|
||||||
return (jailbreak and modifier == ".not") or (not jailbreak and modifier in ["", ".begins", ".ends", ".regex"])
|
return (jailbreak and modifier in [".not", ".isnot"]) or (not jailbreak and modifier in ["", ".is", ".begins", ".ends", ".regex"])
|
||||||
|
|
||||||
def parse(attribute, data, datatype=None, methods=None, parent=None, default=None, options=None, translation=None, minimum=1, maximum=None, regex=None):
|
def parse(attribute, data, datatype=None, methods=None, parent=None, default=None, options=None, translation=None, minimum=1, maximum=None, regex=None):
|
||||||
display = f"{parent + ' ' if parent else ''}{attribute} attribute"
|
display = f"{parent + ' ' if parent else ''}{attribute} attribute"
|
||||||
|
|
Loading…
Reference in a new issue