comparison roundup/rest.py @ 7854:171ff2e487df

Add @group for grouping in rest interface. Helpful for using optgroup in select boxes.
author John Rouillard <rouilj@ieee.org>
date Mon, 01 Apr 2024 14:42:36 -0400
parents 03c1b7ae3a68
children fe0348bbe45b
comparison
equal deleted inserted replaced
7853:03c1b7ae3a68 7854:171ff2e487df
802 'index': 1, # setting just size starts at page 1 802 'index': 1, # setting just size starts at page 1
803 } 803 }
804 verbose = 1 804 verbose = 1
805 display_props = set() 805 display_props = set()
806 sort = [] 806 sort = []
807 group = []
807 for form_field in input.value: 808 for form_field in input.value:
808 key = form_field.name 809 key = form_field.name
809 value = form_field.value 810 value = form_field.value
810 if key.startswith("@page_"): # serve the paging purpose 811 if key.startswith("@page_"): # serve the paging purpose
811 key = key[6:] 812 key = key[6:]
839 sort.append((ss, pn)) 840 sort.append((ss, pn))
840 else: 841 else:
841 raise (Unauthorised( 842 raise (Unauthorised(
842 'User does not have search permission on "%s.%s"' 843 'User does not have search permission on "%s.%s"'
843 % (class_name, pn))) 844 % (class_name, pn)))
845 elif key == "@group":
846 f = value.split(",")
847 for p in f:
848 if not p:
849 raise UsageError("Empty property "
850 "for class %s." % (class_name))
851 if p[0] in ('-', '+'):
852 pn = p[1:]
853 ss = p[0]
854 else:
855 ss = '+'
856 pn = p
857 # Only include properties where we have search permission
858 # Note that hasSearchPermission already returns 0 for
859 # non-existing properties.
860 if self.db.security.hasSearchPermission(
861 uid, class_name, pn
862 ):
863 group.append((ss, pn))
864 else:
865 raise (Unauthorised(
866 'User does not have search permission on "%s.%s"'
867 % (class_name, pn)))
844 elif key.startswith("@"): 868 elif key.startswith("@"):
845 # ignore any unsupported/previously handled control key 869 # ignore any unsupported/previously handled control key
846 # like @apiver 870 # like @apiver
847 pass 871 pass
848 else: # serve the filter purpose 872 else: # serve the filter purpose
910 props[key] = value 934 props[key] = value
911 l = [filter_props] # noqa: E741 935 l = [filter_props] # noqa: E741
912 kw = {} 936 kw = {}
913 if sort: 937 if sort:
914 l.append(sort) 938 l.append(sort)
939 if group:
940 l.append(group)
915 if exact_props: 941 if exact_props:
916 kw['exact_match_spec'] = exact_props 942 kw['exact_match_spec'] = exact_props
917 if page['size'] is None: 943 if page['size'] is None:
918 kw['limit'] = self.max_response_row_size 944 kw['limit'] = self.max_response_row_size
919 elif page['size'] > 0: 945 elif page['size'] > 0:

Roundup Issue Tracker: http://roundup-tracker.org/