Exemple #1
0
def lint_cmd(cli_args, stream=sys.stdout):
    metadata = load_metadata(cli_args.metadata)
    import_metadata(cli_args.modules)
    current, locations = get_metadata().serialize()

    has_errors = False
    display_level = lint.WARNING
    error_level = lint.DOCUMENTATION

    if cli_args.strict:
        display_level = lint.WARNING
        error_level = lint.WARNING
    elif cli_args.quiet:
        display_level = lint.DOCUMENTATION

    for message in lint.metadata_lint(metadata, current, locations):
        if message.level >= display_level:
            stream.write('{}\n'.format(message))

        if message.level >= error_level:
            has_errors = True

    if cli_args.update:
        if not has_errors or cli_args.force:
            with open(cli_args.metadata.name, 'w') as f:
                json.dump(current, f, indent=2)

    return 1 if has_errors else 0
Exemple #2
0
def version_cmd(cli_args, stream=sys.stdout):
    metadata = load_metadata(cli_args.metadata)
    json_version = metadata['$version']
    import_version = None

    if cli_args.modules:
        import_metadata(cli_args.modules)
        import_version = get_metadata().current_version

    stream.write('{}: {}\n'.format(cli_args.metadata.name, json_version))

    if import_version is not None:
        if len(cli_args.modules) == 1:
            name = cli_args.modules[0]
        else:
            name = 'Imported API'
        stream.write('{}: {}\n'.format(name, import_version))

    return 0
Exemple #3
0
 def get_metadata(self, code='', module='service', locations=True):
     fixture = self.useFixture(TemporaryModuleFixture(module, code))
     import_metadata([module])
     metadata, locations = get_metadata().serialize()
     return metadata, locations, fixture.path
Exemple #4
0
    def test_legacy_api_still_works(self):
        service = """

            from acceptable import *
            service = AcceptableService('service')

            root_api = service.api('/', 'root')
            root_api.changelog(4, "changelog")

            @root_api.view(introduced_at='1.0')
            @validate_body({'type': 'object'})
            @validate_output({'type': 'object'})
            @validate_params({'type': 'object', 'properties': {'test': {'type': 'string'}}})
            def my_view():
                "Documentation."
        """
        fixture = self.useFixture(TemporaryModuleFixture('service', service))

        main.import_metadata(['service'])
        import service as svc_mod
        metadata, locations = get_metadata().serialize()

        self.assertEqual(
            {
                '$version': 4,
                'default': {
                    'title': 'Default',
                    'apis': {
                        'root': {
                            'service': 'service',
                            'api_group': 'default',
                            'api_name': 'root',
                            'methods': ['GET'],
                            'url': '/',
                            'doc': "Documentation.",
                            'changelog': {
                                4: 'changelog',
                            },
                            'request_schema': {
                                'type': 'object'
                            },
                            'response_schema': {
                                'type': 'object'
                            },
                            'params_schema': {
                                'type': 'object',
                                'properties': {
                                    'test': {
                                        'type': 'string'
                                    }
                                }
                            },
                            'introduced_at': 1,
                            'title': 'Root',
                        }
                    }
                }
            },
            metadata,
        )

        self.assertEqual(
            {
                'root': {
                    'api': {
                        'filename': fixture.path,
                        'lineno': 4,
                        'module': svc_mod,
                    },
                    'changelog': {
                        4: {
                            'filename': fixture.path,
                            'lineno': 5,
                            'module': svc_mod,
                        }
                    },
                    'request_schema': {
                        'filename': fixture.path,
                        'lineno': 8,
                        'module': svc_mod,
                    },
                    'response_schema': {
                        'filename': fixture.path,
                        'lineno': 9,
                        'module': svc_mod,
                    },
                    'params_schema': {
                        'filename': fixture.path,
                        'lineno': 10,
                        'module': svc_mod,
                    },
                    'view': {
                        'filename': fixture.path,
                        'lineno': 11,
                        'module': svc_mod,
                    },
                }
            },
            locations,
        )
Exemple #5
0
    def test_importing_api_metadata_works(self):
        service = """
            from acceptable import AcceptableService
            service = AcceptableService('myservice', 'group')

            root_api = service.api('/', 'root', introduced_at=1)
            root_api.request_schema = {'type': 'object'}
            root_api.response_schema = {'type': 'object'}
            root_api.params_schema = {'type': 'object'}
            root_api.changelog(4, "changelog")

            @root_api
            def my_view():
                "Documentation."
        """

        fixture = self.useFixture(TemporaryModuleFixture('service', service))
        main.import_metadata(['service'])
        import service as svc_mod
        metadata, locations = get_metadata().serialize()

        self.assertEqual(
            {
                '$version': 4,
                'group': {
                    'title': 'Group',
                    'apis': {
                        'root': {
                            'service': 'myservice',
                            'api_group': 'group',
                            'api_name': 'root',
                            'methods': ['GET'],
                            'url': '/',
                            'doc': "Documentation.",
                            'changelog': {
                                4: 'changelog',
                            },
                            'request_schema': {
                                'type': 'object'
                            },
                            'response_schema': {
                                'type': 'object'
                            },
                            'params_schema': {
                                'type': 'object'
                            },
                            'introduced_at': 1,
                            'title': 'Root',
                        }
                    }
                }
            },
            metadata,
        )

        self.assertEqual(
            {
                'root': {
                    'api': {
                        'filename': fixture.path,
                        'lineno': 4,
                        'module': svc_mod,
                    },
                    'changelog': {
                        4: {
                            'filename': fixture.path,
                            'lineno': 8,
                            'module': svc_mod,
                        },
                    },
                    'request_schema': {
                        'filename': fixture.path,
                        'lineno': 5,
                        'module': svc_mod,
                    },
                    'response_schema': {
                        'filename': fixture.path,
                        'lineno': 6,
                        'module': svc_mod,
                    },
                    'params_schema': {
                        'filename': fixture.path,
                        'lineno': 7,
                        'module': svc_mod
                    },
                    'view': {
                        'filename': fixture.path,
                        'lineno': 11,
                        'module': svc_mod,
                    },
                }
            },
            locations,
        )
Exemple #6
0
 def handle(self, *args, **options):
     get_urlmap()  # this imports all urls and initialises the url mappings
     func = options['func']
     current, _ = get_metadata().serialize()
     func(options, current)
Exemple #7
0
def metadata_cmd(cli_args):
    import_metadata(cli_args.modules, cli_args.dummy_dependencies)
    current, _ = get_metadata().serialize()
    cli_args.output.write(json.dumps(current, indent=2))
    def test_legacy_api_still_works(self):
        service = """

            from acceptable import *
            service = AcceptableService('service')

            root_api = service.api('/', 'root')
            root_api.changelog(4, "changelog")

            @root_api.view(introduced_at='1.0')
            @validate_body({'type': 'object'})
            @validate_output({'type': 'object'})
            def my_view():
                "Documentation."
        """
        fixture = self.useFixture(TemporaryModuleFixture('service', service))

        main.import_metadata(['service'])
        metadata, locations = main.parse(get_metadata())

        self.assertEqual(
            {
                '$version': 4,
                'root': {
                    'service': 'service',
                    'api_group': None,
                    'api_name': 'root',
                    'methods': ['GET'],
                    'url': '/',
                    'doc': "Documentation.",
                    'changelog': {
                        4: 'changelog',
                    },
                    'request_schema': {
                        'type': 'object'
                    },
                    'response_schema': {
                        'type': 'object'
                    },
                    'introduced_at': 1,
                }
            },
            metadata,
        )

        self.assertEqual(
            {
                'root': {
                    'api': {
                        'filename': fixture.path,
                        'lineno': 4
                    },
                    'changelog': {
                        4: {
                            'filename': fixture.path,
                            'lineno': 5
                        },
                    },
                    'request_schema': {
                        'filename': fixture.path,
                        'lineno': 8,
                    },
                    'response_schema': {
                        'filename': fixture.path,
                        'lineno': 9,
                    },
                    'view': {
                        'filename': fixture.path,
                        'lineno': 10,
                    },
                }
            },
            locations,
        )
Exemple #9
0
def metadata_cmd(cli_args):
    import_metadata(cli_args.modules)
    current, _ = parse(get_metadata())
    print(json.dumps(current, indent=2, sort_keys=True))