Projet

Général

Profil

0001-misc-add-parameter-to-declare-schema-of-response-bod.patch

Benjamin Dauvergne, 05 novembre 2020 15:05

Télécharger (6,2 ko)

Voir les différences:

Subject: [PATCH] misc: add parameter to declare schema of response body
 (#21774)

 passerelle/apps/api_particulier/models.py     | 46 +++++++++++++++++++
 .../templates/passerelle/manage/endpoint.html |  7 +++
 passerelle/utils/api.py                       |  6 ++-
 tests/test_generic_endpoint.py                |  7 +++
 4 files changed, 65 insertions(+), 1 deletion(-)
passerelle/apps/api_particulier/models.py
174 174
                      'description': _('requesting user'),
175 175
                      'example_value': 'John Doe (agent)',
176 176
                  },
177
              },
178
              json_schema_response={
179
                  'type': 'object',
180
                  'required': ['err'],
181
                  'properties': {
182
                      'err': {'enum': [0, 1]},
183
                      'declarant1': {
184
                          'type': 'object',
185
                          'properties': {
186
                              'nom': {'type': 'string'},
187
                              'nomNaissance': {'type': 'string'},
188
                              'prenoms': {'type': 'string'},
189
                              'dateNaissance': {'type': 'string'}
190
                          },
191
                      },
192
                      'declarant2': {
193
                          'type': 'object',
194
                          'properties': {
195
                              'nom': {'type': 'string'},
196
                              'nomNaissance': {'type': 'string'},
197
                              'prenoms': {'type': 'string'},
198
                              'dateNaissance': {'type': 'string'}
199
                          }
200
                      },
201
                      'foyerFiscal': {
202
                          'type': 'object',
203
                          'properties': {
204
                              'annee': {'type': 'integer'},
205
                              'adresse': {'type': 'string'},
206
                          }
207
                      },
208
                      'dateRecouvrement': {'type': 'string', 'pattern': r'^\d{1,2}/\d{1,2}/\d{4}$'},
209
                      'dateEtablissement': {'type': 'string', 'pattern': r'^\d{1,2}/\d{1,2}/\d{4}$'},
210
                      'nombreParts': {'type': 'integer'},
211
                      'situationFamille': {'type': 'string'},
212
                      'nombrePersonnesCharge': {'type': 'integer'},
213
                      'revenuBrutGlobal': {'type': 'integer'},
214
                      'revenuImposable': {'type': 'integer'},
215
                      'impotRevenuNetAvantCorrections': {'type': 'integer'},
216
                      'montantImpot': {'type': 'integer'},
217
                      'revenuFiscalReference': {'type': 'integer'},
218
                      'anneeImpots': {'type': 'string', 'pattern': r'^[0-9]{4}$'},
219
                      'anneeRevenus': {'type': 'string', 'pattern': r'^[0-9]{4}$'},
220
                      'erreurCorrectif': {'type': 'string'},
221
                      'situationPartielle': {'type': 'string'}
222
                  }
177 223
              })
178 224
    def v2_avis_imposition(self, request, numero_fiscal, reference_avis, user=None):
179 225
        numero_fiscal = numero_fiscal.strip()[:13]
passerelle/templates/passerelle/manage/endpoint.html
24 24
         </div>
25 25
       </li>
26 26
       {% endif %}
27
       {% if endpoint.response_schemas %}
28
       <li><span class="params-title">{% trans "Response body" %}</span>
29
         <div class="body-schemas">
30
           {% render_body_schemas body_schemas=endpoint.response_schemas %}
31
         </div>
32
       </li>
33
       {% endif %}
27 34
       </ul>
28 35
       {% if endpoint.long_description %}
29 36
         <div class="long-description">
passerelle/utils/api.py
46 46
                 show=True,
47 47
                 show_undocumented_params=True,
48 48
                 display_order=0,
49
                 display_category=''):
49
                 display_category='',
50
                 json_schema_response=None):
50 51
        self.perm = perm
51 52
        self.methods = methods
52 53
        self.serializer_type = serializer_type
......
77 78
        self.show_undocumented_params = show_undocumented_params
78 79
        self.display_order = display_order
79 80
        self.display_category = display_category
81
        self.response_schemas = {}
82
        if json_schema_response:
83
            self.response_schemas['application/json'] = json_schema_response
80 84

  
81 85
    def __call__(self, func):
82 86
        func.endpoint_info = self
tests/test_generic_endpoint.py
32 32
from django.core.urlresolvers import reverse
33 33

  
34 34
from passerelle.apps.arcgis.models import ArcGIS
35
from passerelle.apps.api_particulier.models import APIParticulier
35 36
from passerelle.base.models import ResourceLog, ProxyLogger, BaseResource, HTTPResource, LoggingParameters
36 37
from passerelle.base.models import ResourceStatus
37 38
from passerelle.apps.mdel.models import MDEL
......
786 787
    connector.id = 42
787 788

  
788 789
    assert ['%s%s' % (ep.name, ep.pattern or '') for ep in connector.get_endpoints_infos()] == expected_ordering
790

  
791

  
792
def test_response_schema(db, app):
793
    utils.make_resource(APIParticulier, slug='test', platform='test', api_key='xxx')
794
    response = app.get('/api-particulier/test/')
795
    assert 'nombrePersonnesCharge' in response
789
-