0001-generic-endpoint-define-optional-ordering-for-displa.patch
passerelle/base/models.py | ||
---|---|---|
256 | 256 |
endpoint_info = copy.copy(method.endpoint_info) |
257 | 257 |
endpoint_info.http_method = http_method |
258 | 258 |
endpoints.append(endpoint_info) |
259 |
endpoints.sort(key=lambda x: (x.name or '', x.pattern or '')) |
|
259 |
endpoints.sort(key=lambda x: (x.display_order, x.name or '', x.pattern or ''))
|
|
260 | 260 |
if hasattr(self, 'queries'): |
261 | 261 |
self.append_custom_queries(endpoints) |
262 | 262 |
return endpoints |
passerelle/utils/api.py | ||
---|---|---|
44 | 44 |
cache_duration=None, |
45 | 45 |
post=None, |
46 | 46 |
show=True, |
47 |
show_undocumented_params=True): |
|
47 |
show_undocumented_params=True, |
|
48 |
display_order=0): |
|
48 | 49 |
self.perm = perm |
49 | 50 |
self.methods = methods |
50 | 51 |
self.serializer_type = serializer_type |
... | ... | |
73 | 74 |
self.long_descriptions['post'] = post.get('long_description') |
74 | 75 |
self.show = show |
75 | 76 |
self.show_undocumented_params = show_undocumented_params |
77 |
try: |
|
78 |
self.display_order = int(display_order) |
|
79 |
except ValueError: |
|
80 |
self.display_order = 0 |
|
76 | 81 | |
77 | 82 |
def __call__(self, func): |
78 | 83 |
func.endpoint_info = self |
tests/test_generic_endpoint.py | ||
---|---|---|
714 | 714 |
app = login(app, username='admin', password='admin') |
715 | 715 |
resp = app.post_json('/mdel/test/create', params=payload, status=200) |
716 | 716 |
assert resp.json['data']['demand_id'] == '1-14-ILE-LA' |
717 | ||
718 | ||
719 |
class DummyConnectorWithoutOrdering(DummyConnectorBase): |
|
720 |
@endpoint() |
|
721 |
def b(self, request): |
|
722 |
pass |
|
723 | ||
724 |
@endpoint(name='c', pattern='b') |
|
725 |
def cb(self, request): |
|
726 |
pass |
|
727 | ||
728 |
@endpoint(name='c', pattern='a') |
|
729 |
def ca(self, request): |
|
730 |
pass |
|
731 | ||
732 |
@endpoint() |
|
733 |
def a(self, request): |
|
734 |
pass |
|
735 | ||
736 | ||
737 |
class DummyConnectorWithOrdering(DummyConnectorBase): |
|
738 |
@endpoint() |
|
739 |
def b(self, request): |
|
740 |
pass |
|
741 | ||
742 |
@endpoint(display_order='wrong value') |
|
743 |
def ba(self, request): |
|
744 |
pass |
|
745 | ||
746 |
@endpoint(name='c', pattern='b', display_order='1') |
|
747 |
def cb(self, request): |
|
748 |
pass |
|
749 | ||
750 |
@endpoint(name='c', pattern='a', display_order=1) |
|
751 |
def ca(self, request): |
|
752 |
pass |
|
753 | ||
754 |
@endpoint(display_order=42) |
|
755 |
def a(self, request): |
|
756 |
pass |
|
757 | ||
758 | ||
759 |
@pytest.mark.parametrize('connector_class, expected_ordering', [ |
|
760 |
(DummyConnectorWithoutOrdering, [('a', None), ('b', None), ('c', 'a'), ('c', 'b')]), |
|
761 |
(DummyConnectorWithOrdering, [('b', None), ('ba', None), ('c', 'a'), ('c', 'b'), ('a', None)]), |
|
762 |
]) |
|
763 |
def test_generic_up_in_endpoints_ordering(db, app, connector_class, expected_ordering): |
|
764 |
connector = connector_class() |
|
765 |
connector.id = 42 |
|
766 | ||
767 |
assert [(ep.name, ep.pattern) for ep in connector.get_endpoints_infos()] == expected_ordering |
|
717 |
- |