Exemplo n.º 1
0
def main() -> None:
    """
    Main entrypoint for builder.
    """
    parser = get_cli_parser()
    args = parser.parse_args()
    logger = get_logger(verbose=args.debug, panic=args.panic)
    session = Session(region_name=DUMMY_REGION)
    args.output_path.mkdir(exist_ok=True)
    service_names: List[ServiceName] = []
    master_service_names = []
    available_services = session.get_available_services()

    for available_service in available_services:
        try:
            service_name = ServiceNameCatalog.find(available_service)
            master_service_names.append(service_name)
        except ValueError:
            logger.info(f"Service {available_service} is not supported, skipping.")

    for service_name in args.service_names:
        if service_name.name not in available_services:
            logger.warning(f"Service {service_name.name} is not available, skipping.")
            continue

        service_name.boto3_version = boto3_version
        service_names.append(service_name)

    build_version = args.build_version or boto3_version
    JinjaManager.update_globals(
        master_pypi_name=PYPI_NAME,
        master_module_name=MODULE_NAME,
        boto3_stubs_name=BOTO3_STUBS_NAME,
        boto3_version=boto3_version,
        build_version=build_version,
        builder_version=version,
    )

    logger.info(f"Bulding version {build_version}")

    if not args.skip_services:
        for index, service_name in enumerate(service_names):
            logger.info(
                f"[{index + 1}/{len(service_names)}] Generating {service_name.module_name} module"
            )
            output_path = args.output_path / f"{service_name.module_name}_package"
            process_service(
                session=session, output_path=output_path, service_name=service_name
            )

    if not args.skip_master:
        logger.info(f"Generating {MODULE_NAME} module")
        output_path = args.output_path / "master_package"
        process_master(session, output_path, master_service_names)

        logger.info(f"Generating {BOTO3_STUBS_NAME} module")
        output_path = args.output_path / "boto3_stubs_package"
        process_boto3_stubs(output_path, master_service_names)

    logger.info("Completed")
Exemplo n.º 2
0
def render_jinja2_template(
    template_path: Path,
    package: Package | None = None,
    service_name: ServiceName | None = None,
) -> str:
    """
    Render Jinja2 template to a string.

    Arguments:
        template_path -- Relative path to template in `TEMPLATES_PATH`
        module -- Module record.
        service_name -- ServiceName instance.

    Returns:
        A rendered template.
    """
    if template_path.is_absolute():
        template_full_path = template_path
    else:
        template_full_path = TEMPLATES_PATH / template_path

    if not template_full_path.exists():
        raise ValueError(f"Template {template_full_path} not found")

    template = JinjaManager.get_environment().get_template(
        template_full_path.relative_to(TEMPLATES_PATH).as_posix())
    return template.render(package=package, service_name=service_name)
Exemplo n.º 3
0
def main() -> None:
    """
    Main entrypoint for builder.
    """
    args = parse_args(sys.argv[1:])
    logger = get_logger(level=args.log_level)
    session = Session(region_name=DUMMY_REGION)

    botocore_session = session._session
    botocore_session.set_credentials("access_key", "secret_key", "token")

    args.output_path.mkdir(exist_ok=True, parents=True)
    available_service_names = get_available_service_names(session)

    logger.info(
        f"{len(available_service_names)} supported boto3 services discovered")
    if args.list_services:
        for service_name in available_service_names:
            print(
                f"- {service_name.name} : {service_name.class_name} {service_name.boto3_doc_link}"
            )
        return

    service_names = get_selected_service_names(args.service_names,
                                               available_service_names)

    for service_name in available_service_names:
        service_name.has_service_resource = bool(
            get_boto3_resource(session, service_name))
    for service_name in service_names:
        service_name.has_service_resource = bool(
            get_boto3_resource(session, service_name))

    JinjaManager.update_globals(
        builder_version=args.builder_version,
        get_anchor_link=get_anchor_link,
        render_docstrings=True,
        hasattr=hasattr,
        len=len,
    )

    boto3_generator = Boto3Generator(
        service_names=service_names,
        available_service_names=available_service_names,
        master_service_names=service_names
        if args.partial_overload else available_service_names,
        session=session,
        output_path=args.output_path,
        generate_setup=not args.installed,
        skip_published=args.skip_published,
        disable_smart_version=args.disable_smart_version,
        version=args.build_version,
    )
    aiobotocore_generator = AioBotocoreGenerator(
        service_names=service_names,
        available_service_names=available_service_names,
        master_service_names=service_names
        if args.partial_overload else available_service_names,
        session=session,
        output_path=args.output_path,
        generate_setup=not args.installed,
        skip_published=args.skip_published,
        disable_smart_version=args.disable_smart_version,
        version=args.build_version,
    )
    generators_map = {
        Product.boto3: boto3_generator.generate_stubs,
        Product.boto3_services: boto3_generator.generate_service_stubs,
        Product.boto3_docs: boto3_generator.generate_docs,
        Product.aiobotocore: aiobotocore_generator.generate_stubs,
        Product.aiobotocore_services:
        aiobotocore_generator.generate_service_stubs,
        Product.aiobotocore_docs: aiobotocore_generator.generate_docs,
    }
    generators = [generators_map[p] for p in args.products]
    for generator in generators:
        generator()

    logger.info("Completed")
Exemplo n.º 4
0
def main() -> None:
    """
    Main entrypoint for builder.
    """
    args = parse_args(sys.argv[1:])
    logger = get_logger(verbose=args.debug, panic=args.panic)
    session = Session(region_name=DUMMY_REGION)
    args.output_path.mkdir(exist_ok=True)
    service_names: List[ServiceName] = []
    master_service_names: List[ServiceName] = []
    available_services = session.get_available_services()

    for available_service in available_services:
        try:
            service_name = ServiceNameCatalog.find(available_service)
        except ValueError:
            logger.info(f"Service {available_service} is not fully supported.")
            continue

        service_name.boto3_version = boto3_version
        master_service_names.append(service_name)

    if args.service_names:
        for service_name in args.service_names:
            if service_name.name not in available_services:
                logger.info(f"Service {service_name.name} is not provided by boto3, skipping.")
                continue

            service_name.boto3_version = boto3_version
            service_names.append(service_name)
    else:
        service_names = master_service_names

    build_version = args.build_version or boto3_version
    version = (Path(__file__).parent / "version.txt").read_text().strip()
    JinjaManager.update_globals(
        master_pypi_name=PYPI_NAME,
        master_module_name=MODULE_NAME,
        boto3_stubs_name=BOTO3_STUBS_NAME,
        boto3_version=boto3_version,
        build_version=build_version,
        builder_version=version,
    )

    logger.info(f"Bulding version {build_version}")

    if not args.skip_services:
        total_str = f"{len(service_names)}"
        for index, service_name in enumerate(service_names):
            current_str = f"{{:0{len(total_str)}}}".format(index + 1)
            logger.info(f"[{current_str}/{total_str}] Generating {service_name.module_name} module")
            process_service(
                session=session,
                output_path=args.output_path,
                service_name=service_name,
                generate_setup=not args.installed,
            )

    if not args.skip_master:
        logger.info(f"Generating {MODULE_NAME} module")
        process_master(
            session,
            args.output_path,
            master_service_names,
            generate_setup=not args.installed,
        )

        logger.info(f"Generating {BOTO3_STUBS_NAME} module")
        process_boto3_stubs(
            session,
            args.output_path,
            master_service_names,
            generate_setup=not args.installed,
        )

    logger.info("Completed")
Exemplo n.º 5
0
def main() -> None:
    """
    Main entrypoint for builder.
    """
    args = parse_args(sys.argv[1:])
    logger = get_logger(level=args.log_level)
    session = Session(region_name=DUMMY_REGION)
    args.output_path.mkdir(exist_ok=True)
    available_service_names = get_available_service_names(session)
    available_service_names_set = {i.name for i in available_service_names}
    service_names: List[ServiceName] = []

    logger.info(
        f"{len(available_service_names_set)} supported boto3 services discovered"
    )
    if args.list_services:
        for service_name in available_service_names:
            print(
                f"- {service_name.name} : {service_name.class_name} {service_name.boto3_doc_link}"
            )
        return

    selected_service_names = args.service_names or [
        i.name for i in available_service_names
    ]

    for service_name_str in selected_service_names:
        if service_name_str not in available_service_names_set:
            logger.info(
                f"Service {service_name_str} is not provided by boto3, skipping"
            )
            continue

        service_name = ServiceNameCatalog.find(service_name_str)
        service_names.append(service_name)

    build_version = args.build_version or boto3_version
    min_build_version = get_min_build_version(build_version)
    botocore_build_version = botocore_version
    if args.build_version and ".post" in args.build_version:
        post_release = args.build_version.split(".post")[-1]
        botocore_build_version = f"{botocore_version}.post{post_release}"
    JinjaManager.update_globals(
        master_pypi_name=PYPI_NAME,
        master_module_name=MODULE_NAME,
        boto3_stubs_name=BOTO3_STUBS_NAME,
        boto3_version=boto3_version,
        botocore_version=botocore_version,
        build_version=build_version,
        min_build_version=min_build_version,
        botocore_build_version=botocore_build_version,
        builder_version=args.builder_version,
        get_anchor_link=get_anchor_link,
        render_docstrings=True,
        hasattr=hasattr,
    )

    logger.info(f"Bulding version {build_version}")

    if args.generate_docs:
        generate_docs(args, service_names, session)
    else:
        generate_stubs(args, service_names, session)

    logger.info("Completed")