Mercurial > p > roundup > code
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: |
