Skip to content

Commit

Permalink
Better name for swagger schema setting key, and fix tween.load_settin…
Browse files Browse the repository at this point in the history
…gs()
  • Loading branch information
dnephin committed Feb 20, 2015
1 parent a72a1f4 commit bb38a7f
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 43 deletions.
19 changes: 13 additions & 6 deletions pyramid_swagger/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,26 @@
"""
import pyramid
from .api import register_api_doc_endpoints
from .ingest import add_swagger_schema
from .ingest import (
compile_swagger_schema,
validate_swagger_schema,
)


def includeme(config):
add_swagger_schema(config.registry)
settings = config.registry.settings
schema_dir = settings.get('pyramid_swagger.schema_directory', 'api_docs/')

if settings.get('pyramid_swagger.enable_swagger_spec_validation', True):
validate_swagger_schema(schema_dir)

if 'pyramid_swagger.schema' not in settings:
settings['pyramid_swagger.schema'] = compile_swagger_schema(schema_dir)

config.add_tween(
"pyramid_swagger.tween.validation_tween_factory",
under=pyramid.tweens.EXCVIEW
)

if config.registry.settings.get(
'pyramid_swagger.enable_api_doc_views',
True
):
if settings.get('pyramid_swagger.enable_api_doc_views', True):
register_api_doc_endpoints(config)
2 changes: 1 addition & 1 deletion pyramid_swagger/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

def register_api_doc_endpoints(config):
"""Create and register pyramid endpoints for /api-docs*."""
swagger_schema = config.registry.settings['swagger_schema']
swagger_schema = config.registry.settings['pyramid_swagger.schema']
with open(swagger_schema.resource_listing) as input_file:
register_resource_listing(config, simplejson.load(input_file))

Expand Down
33 changes: 8 additions & 25 deletions pyramid_swagger/ingest.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,31 +77,14 @@ def compile_swagger_schema(schema_dir):


# TODO: more test cases
def add_swagger_schema(registry):
"""Add the swagger_schema to the registry.settings
"""
schema_dir = registry.settings.get(
'pyramid_swagger.schema_directory',
'api_docs/'
)
if registry.settings.get(
'pyramid_swagger.enable_swagger_spec_validation',
True
):
listing_filename = os.path.join(schema_dir, API_DOCS_FILENAME)
# TODO: this will be replaced by ssv shortly
listing_json = _load_resource_listing(listing_filename)
mapping = build_schema_mapping(schema_dir, listing_json)
validate_swagger_schemas(listing_filename, mapping.values())

# TODO: docs for this
if registry.settings.get(
'pyramid_swagger.enable_build_swagger_schema_model',
True
):
registry.settings['swagger_schema'] = (
compile_swagger_schema(schema_dir)
)
def validate_swagger_schema(schema_dir):
"""Add the swagger_schema to the registry.settings """
listing_filename = os.path.join(schema_dir, API_DOCS_FILENAME)
# TODO: this will be replaced by ssv shortly
listing_json = _load_resource_listing(listing_filename)
mapping = build_schema_mapping(schema_dir, listing_json)
validate_swagger_schemas(listing_filename, mapping.values())



def ingest_resources(mapping, schema_dir):
Expand Down
14 changes: 6 additions & 8 deletions pyramid_swagger/tween.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@
class Settings(namedtuple(
'Settings',
[
'schema_dir',
'validate_swagger_spec',
'schema',
'validate_request',
'validate_response',
'validate_path',
Expand Down Expand Up @@ -84,7 +83,6 @@ def validation_tween_factory(handler, registry):
while delegating to the relevant matching view.
"""
settings = load_settings(registry)
schema = registry.settings['swagger_schema']
route_mapper = registry.queryUtility(IRoutesMapper)
disable_all_validation = not any((
settings.validate_request,
Expand All @@ -100,8 +98,10 @@ def validator_tween(request):
validation_context = _get_validation_context(registry)

try:
schema_data, resolver = schema.schema_and_resolver_for_request(
request)
(
schema_data,
resolver
) = settings.schema.schema_and_resolver_for_request(request)
except PathNotMatchedError as exc:
if settings.validate_path:
with validation_context(request):
Expand Down Expand Up @@ -134,10 +134,8 @@ def validator_tween(request):


def load_settings(registry):
# TODO: remove these unused settings
return Settings(
None,
None,
schema=registry.settings['pyramid_swagger.schema'],
validate_request=registry.settings.get(
'pyramid_swagger.enable_request_validation',
True
Expand Down
2 changes: 1 addition & 1 deletion tests/acceptance/response_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def handler(request):
return response or Response()

settings = dict({
'swagger_schema': compile_swagger_schema(
'pyramid_swagger.schema': compile_swagger_schema(
'tests/sample_schemas/good_app/'),
'pyramid_swagger.enable_swagger_spec_validation': False},
**overrides
Expand Down
5 changes: 3 additions & 2 deletions tests/includeme_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@


@mock.patch('pyramid_swagger.register_api_doc_endpoints')
def test_disable_api_doc_views(mock_register):
@mock.patch('pyramid_swagger.ingest.compile_swagger_schema')
def test_disable_api_doc_views(_ ,mock_register):
settings = {
'pyramid_swagger.enable_api_doc_views': False,
'pyramid_swagger.enable_swagger_spec_validation': False,
'pyramid_swagger.enable_build_swagger_schema_model': False,
'pyramid_swagger.schema': None,
}
mock_config = mock.Mock(registry=mock.Mock(settings=settings))
pyramid_swagger.includeme(mock_config)
Expand Down

0 comments on commit bb38a7f

Please sign in to comment.