Projet

Général

Profil

0001-generic-endpoint-define-optional-ordering-for-displa.patch

Lauréline Guérin, 30 avril 2020 15:20

Télécharger (3,62 ko)

Voir les différences:

Subject: [PATCH] generic endpoint: define optional ordering for display
 (#17730)

 passerelle/base/models.py      |  2 +-
 passerelle/utils/api.py        |  4 ++-
 tests/test_generic_endpoint.py | 47 ++++++++++++++++++++++++++++++++++
 3 files changed, 51 insertions(+), 2 deletions(-)
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 or 99999999, 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
        self.display_order = display_order
76 78

  
77 79
    def __call__(self, func):
78 80
        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='bb')
725
    def cb(self, request):
726
        pass
727

  
728
    @endpoint(name='c', pattern='aa')
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(name='c', pattern='bb', display_order=1)
743
    def cb(self, request):
744
        pass
745

  
746
    @endpoint(name='c', pattern='aa', display_order=1)
747
    def ca(self, request):
748
        pass
749

  
750
    @endpoint(display_order=42)
751
    def a(self, request):
752
        pass
753

  
754

  
755
@pytest.mark.parametrize('connector_class, expected_ordering', [
756
    (DummyConnectorWithoutOrdering, ['a', 'b', 'caa', 'cbb']),
757
    (DummyConnectorWithOrdering, ['caa', 'cbb', 'a', 'b']),
758
])
759
def test_generic_up_in_endpoints_ordering(db, app, connector_class, expected_ordering):
760
    connector = connector_class()
761
    connector.id = 42
762

  
763
    assert ['%s%s' % (ep.name, ep.pattern or '') for ep in connector.get_endpoints_infos()] == expected_ordering
717
-