Skip to content

Support creating a GlueCatalog with own client. #1910

@rchowell

Description

@rchowell

Feature Request / Improvement

Sometimes I have my own boto3 client which I would like to use as the GlueCatalog client. Perhaps an optional client constructor parameter or an alternative constructor can address this.

class GlueCatalog(MetastoreCatalog):
    def __init__(self, name: str, client: GlueClient | None = None, **properties: Any):
        super().__init__(name, **properties)

        retry_mode_prop_value = get_first_property_value(properties, GLUE_RETRY_MODE)

        if client:
            self.glue = client
        else:
            session = boto3.Session(
                profile_name=properties.get(GLUE_PROFILE_NAME),
                region_name=get_first_property_value(properties, GLUE_REGION, AWS_REGION),
                botocore_session=properties.get(BOTOCORE_SESSION),
                aws_access_key_id=get_first_property_value(properties, GLUE_ACCESS_KEY_ID, AWS_ACCESS_KEY_ID),
                aws_secret_access_key=get_first_property_value(properties, GLUE_SECRET_ACCESS_KEY, AWS_SECRET_ACCESS_KEY),
                aws_session_token=get_first_property_value(properties, GLUE_SESSION_TOKEN, AWS_SESSION_TOKEN),
            )
            self.glue: GlueClient = session.client(
                "glue",
                endpoint_url=properties.get(GLUE_CATALOG_ENDPOINT),
                config=Config(
                    retries={
                        "max_attempts": properties.get(GLUE_MAX_RETRIES, MAX_RETRIES),
                        "mode": retry_mode_prop_value if retry_mode_prop_value in EXISTING_RETRY_MODES else STANDARD_RETRY_MODE,
                    }
                ),
            )

Currently I am using __new__ to set this myself, but perhaps poor practice, and it's not clear at the moment which missing properties may impact me later.

gc = GlueCatalog.__new__(GlueCatalog)
gc.name =  my_name
gc.properties = {}
gc.glue = my_client  # <-----

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions