Esempio n. 1
0
def rate_limited_resource(resource_class):
    # default rate limit values
    rate_limits = {
        "get": "1000/10second 2000/minute 6000/5minute 10000/15minute",
        "post": "100/10second 1000/minute 3000/5minute 6000/15minute",
        "put": "100/10second 1000/minute 3000/5minute 6000/15minute",
        "delete": "100/10second 1000/minute 3000/5minute 6000/15minute",
    }
    limit_decorators = []
    http_methods_in_resource = [
        func.lower() for func in resource_class.methods
    ]

    for method in http_methods_in_resource:
        field = resource_class.__qualname__.split(
            "Resource")[0].lower() + "_" + method
        limits = app_config.get_key("mwdb_limiter", field)

        if not limits:
            limits = rate_limits[method]

        for limit in limits.split():
            limit_decorators.append(
                limiter.limit(
                    limit,
                    methods=[method],
                    error_message=
                    (f"Request limit: {limit} for {method} method was exceeded!"
                     ),
                    exempt_when=is_rate_limit_disabled,
                ))
    resource_class.decorators = limit_decorators

    return resource_class
Esempio n. 2
0
        click.echo(
            textwrap.dedent(
                """
        MWDB configured successfully!

        Use 'mwdb-core run' to run the server.
        """
            )
        )


@configure.command("web", with_appcontext=False)
@click.option(
    "--target-dir",
    type=click.Path(resolve_path=True),
    default=app_config.get_key("mwdb", "web_folder"),
    show_default=True,
    help="Build target directory to be overwritten.",
    required=True,
)
@click.pass_context
def configure_web(ctx, target_dir):
    """
    Rebuild MWDB web application files.

    By default MWDB serves pre-built web application bundle, but if
    you want to use web plugins: web need to be rebuilt from sources.

    Command requires Node.js and npm to be installed.
    """
    from mwdb.cli.web import npm_build_web