Skip to content

Commit 4924320

Browse files
Add support for 'group' and 'having' keys in smart filters (#1286)
* Add support for 'group' and 'having' keys in SmartFilterMixin - fixes #1285 * Add `group` and `having` fields to `additionalFields` list in `FilteringType` class - This should allow passing the parsed filters back into `search()`. Co-Authored-By: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> --------- Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com>
1 parent 556b4b3 commit 4924320

2 files changed

Lines changed: 11 additions & 3 deletions

File tree

plexapi/library.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2727,7 +2727,9 @@ def _manualFields(self):
27272727
('id', 'integer', 'Rating Key'),
27282728
('index', 'integer', f'{self.type.capitalize()} Number'),
27292729
('lastRatedAt', 'date', f'{self.type.capitalize()} Last Rated'),
2730-
('updatedAt', 'date', 'Date Updated')
2730+
('updatedAt', 'date', 'Date Updated'),
2731+
('group', 'string', 'SQL Group By Statement'),
2732+
('having', 'string', 'SQL Having Clause')
27312733
]
27322734

27332735
if self.type == 'movie':
@@ -2778,11 +2780,14 @@ def _manualFields(self):
27782780

27792781
manualFields = []
27802782
for field, fieldType, fieldTitle in additionalFields:
2783+
if field not in {'group', 'having'}:
2784+
field = f"{prefix}{field}"
27812785
fieldXML = (
2782-
f'<Field key="{prefix}{field}" '
2786+
f'<Field key="{field}" '
27832787
f'title="{fieldTitle}" '
27842788
f'type="{fieldType}"/>'
27852789
)
2790+
27862791
manualFields.append(self._manuallyLoadXML(fieldXML, FilteringField))
27872792

27882793
return manualFields

plexapi/mixins.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,14 @@ def _parseQueryFeed(self, feed: "deque[Tuple[str, str]]") -> dict:
116116
filtersDict = {}
117117
special_keys = {"type", "sort"}
118118
integer_keys = {"includeGuids", "limit"}
119-
reserved_keys = special_keys | integer_keys
119+
as_is_keys = {"group", "having"}
120+
reserved_keys = special_keys | integer_keys | as_is_keys
120121
while feed:
121122
key, value = feed.popleft()
122123
if key in integer_keys:
123124
filtersDict[key] = int(value)
125+
elif key in as_is_keys:
126+
filtersDict[key] = value
124127
elif key == "type":
125128
filtersDict["libtype"] = utils.reverseSearchType(value)
126129
elif key == "sort":

0 commit comments

Comments
 (0)