@@ -20,20 +20,23 @@ class SortOrder(Enum):
2020 asc = 1
2121 desc = 2
2222
23+ class Operator (Enum ):
24+ IS = "IS"
25+ NOT = "NOT"
26+
2327class Field :
2428 name : str
25- value : Optional [str ]
26- operator : Optional [str ]
29+ value : Optional [Union [ str , list [ str ]]] = None
30+ operator : Optional [Operator ]
2731 sort_order : Optional [SortOrder ]
2832
29- def __init__ (self , name : str , value : str , operator : Optional [str ] = None , sort_order : Optional [SortOrder ]= None ):
33+ def __init__ (self , name : str , value : Union [ str , list [ str ]], operator : Optional [Operator ] = Operator . IS , sort_order : Optional [SortOrder ]= None ):
3034 self .name = name
3135 self .value = value
3236 self .operator = operator
3337 self .sort_order = sort_order
3438
3539
36-
3740class ContentAPI (AuthenticatedAPI ):
3841 """
3942 The ContentAPI class provides the search interface to the Preservica repository.
@@ -73,8 +76,8 @@ def user_security_tags(self, with_permissions: bool = False):
7376
7477 def full_text (self , reference : str ):
7578 """
76- Return the full text index value for the reference
77- The reference must be an Asset.
79+ Return the full text index value for asset.
80+ The reference must be for an Asset.
7881
7982 If the Asset has been OCR'd then this will return the OCR text
8083
@@ -341,10 +344,23 @@ def _search_fields(self, query: str = "%", fields: list[Field]=None, start_index
341344 metadata_elements .append (field .name )
342345 if field .value is None or field .value == "" :
343346 field_list .append ('{' f' "name": "{ field .name } ", "values": [] ' + '}' )
344- elif field .operator == "NOT" :
345- field_list .append ('{' f' "name": "{ field .name } ", "values": ["{ field .value } "], "operator": "NOT" ' + '}' )
346347 else :
347- field_list .append ('{' f' "name": "{ field .name } ", "values": ["{ field .value } "] ' + '}' )
348+
349+ if isinstance (field .value , str ):
350+ if field .operator == Operator .NOT :
351+ field_list .append (
352+ '{' f' "name": "{ field .name } ", "values": ["{ field .value } "], "operator": "NOT" ' + '}' )
353+ else :
354+ field_list .append ('{' f' "name": "{ field .name } ", "values":[ "{ field .value } " ]' '}' )
355+ if isinstance (field .value , list ):
356+ values = [f'"{ w } "' for w in field .value ]
357+ v :str = f' { "," .join (values )} '
358+ if field .operator == Operator .NOT :
359+ field_list .append (
360+ '{' f' "name": "{ field .name } ", "values": [ { v } ], "operator": "NOT" ' + '}' )
361+ else :
362+ field_list .append ('{' f' "name": "{ field .name } ", "values":[ { v } ]' '}' )
363+
348364
349365 if field .sort_order is not None :
350366 sort_list .append (f'{{"sortFields": ["{ field .name } "], "sortOrder": "{ field .sort_order .name } "}}' )
@@ -434,7 +450,8 @@ def search_index_filter_hits(self, query: str = "%", filter_values: dict = None)
434450 if isinstance (value , str ):
435451 field_list .append ('{' f' "name": "{ key } ", "values": ["{ value } "] ' + '}' )
436452 if isinstance (value , list ):
437- v = f' { "," .join (f'"{ w } "' for w in value )} '
453+ values = [f'"{ w } "' for w in value ]
454+ v : str = f' { "," .join (values )} '
438455 field_list .append ('{' f' "name": "{ key } ", "values":[ { v } ]' '}' )
439456
440457 filter_terms = ',' .join (field_list )
@@ -470,7 +487,8 @@ def _search_index_filter(self, query: str = "%", start_index: int = 0, page_size
470487 if isinstance (value , str ):
471488 field_list .append ('{' f' "name": "{ key } ", "values": ["{ value } "] ' + '}' )
472489 if isinstance (value , list ):
473- v = f' { "," .join (f'"{ w } "' for w in value )} '
490+ values = [f'"{ w } "' for w in value ]
491+ v : str = f' { "," .join (values )} '
474492 field_list .append ('{' f' "name": "{ key } ", "values":[ { v } ]' '}' )
475493
476494 filter_terms = ',' .join (field_list )
0 commit comments