Browse Source

Merge pull request #38 from inkhey/fix/pyramid-swagger-ui

Damien Accorsi 6 years ago
parent
commit
b190b87151
No account linked to committer's email
2 changed files with 53 additions and 8 deletions
  1. 28 0
      hapic/ext/pyramid/context.py
  2. 25 8
      hapic/hapic.py

+ 28 - 0
hapic/ext/pyramid/context.py View File

@@ -147,3 +147,31 @@ class PyramidContext(BaseContext):
147 147
 
148 148
     def by_pass_output_wrapping(self, response: typing.Any) -> bool:
149 149
         return False
150
+
151
+    def add_view(
152
+        self,
153
+        route: str,
154
+        http_method: str,
155
+        view_func: typing.Callable[..., typing.Any],
156
+    ) -> None:
157
+
158
+        self.configurator.add_route(
159
+            name=route,
160
+            path=route,
161
+            request_method=http_method
162
+        )
163
+
164
+        self.configurator.add_view(
165
+            view_func,
166
+            route_name=route,
167
+        )
168
+
169
+    def serve_directory(
170
+        self,
171
+        route_prefix: str,
172
+        directory_path: str,
173
+    ) -> None:
174
+        self.configurator.add_static_view(
175
+            name=route_prefix,
176
+            path=directory_path,
177
+        )

+ 25 - 8
hapic/hapic.py View File

@@ -409,16 +409,11 @@ class Hapic(object):
409 409
         if not route.endswith('/'):
410 410
             route = '{}/'.format(route)
411 411
 
412
-        # Add swagger directory as served static dir
413 412
         swaggerui_path = os.path.join(
414 413
             os.path.dirname(os.path.abspath(__file__)),
415 414
             'static',
416 415
             'swaggerui',
417 416
         )
418
-        self.context.serve_directory(
419
-            route,
420
-            swaggerui_path,
421
-        )
422 417
 
423 418
         # Documentation file view
424 419
         doc_yaml = self.doc_generator.get_doc_yaml(
@@ -428,7 +423,15 @@ class Hapic(object):
428 423
             description=description,
429 424
         )
430 425
 
431
-        def spec_yaml_view():
426
+        def spec_yaml_view(*args, **kwargs):
427
+            """
428
+            Method to return swagger generated yaml spec file.
429
+
430
+            This method will be call as a framework view, like those,
431
+            it need to handle the default arguments of a framework view.
432
+            As frameworks have different arguments patterns, we should
433
+            allow any arguments patterns (args, kwargs).
434
+            """
432 435
             return self.context.get_response(
433 436
                 doc_yaml,
434 437
                 mimetype='text/x-yaml',
@@ -445,14 +448,22 @@ class Hapic(object):
445 448
         )
446 449
 
447 450
         # Declare the swaggerui view
448
-        def api_doc_view():
451
+        def api_doc_view(*args, **kwargs):
452
+            """
453
+            Method to return html index view of swagger ui.
454
+
455
+            This method will be call as a framework view, like those,
456
+            it need to handle the default arguments of a framework view.
457
+            As frameworks have different arguments patterns, we should
458
+            allow any arguments patterns (args, kwargs).
459
+            """
449 460
             return self.context.get_response(
450 461
                 doc_page_content,
451 462
                 http_code=HTTPStatus.OK,
452 463
                 mimetype='text/html',
453 464
             )
454 465
 
455
-        # Add a view to generate the html index page of swaggerui
466
+        # Add a view to generate the html index page of swagger-ui
456 467
         self.context.add_view(
457 468
             route=route,
458 469
             http_method='GET',
@@ -465,3 +476,9 @@ class Hapic(object):
465 476
             http_method='GET',
466 477
             view_func=spec_yaml_view,
467 478
         )
479
+
480
+        # Add swagger directory as served static dir
481
+        self.context.serve_directory(
482
+            route,
483
+            swaggerui_path,
484
+        )