gapic-generator-python icon indicating copy to clipboard operation
gapic-generator-python copied to clipboard

Dictionary support not reflected in type annotations

Open PicardParis opened this issue 2 years ago • 3 comments

Issue

  • This is a follow-up to #986 (closed). Retesting the recent google-cloud-documentai==1.5.0 version, the issue is still present.
  • This code is valid:
    import google.cloud.documentai_v1 as documentai
    
    client_options = dict(api_endpoint="eu-documentai.googleapis.com")
    client = documentai.DocumentProcessorServiceClient(client_options=client_options)
    
  • But it triggers the following type checker warning:
    Argument of type "dict[str, str]" cannot be assigned to parameter "client_options" of type "ClientOptions | None" in function "__init__"
    Type "dict[str, str]" cannot be assigned to type "ClientOptions | None"
    "dict[str, str]" is incompatible with "ClientOptions"
    
  • If you check the source, client_options can be a dict, yet its declaration says otherwise:
    def __init__(
        ...
        client_options: Optional[client_options_lib.ClientOptions] = None,
        ...
    ) -> None:
        ...
        if isinstance(client_options, dict):
            client_options = client_options_lib.from_dict(client_options)
    

Expected

def __init__(
    ...
    client_options: Union[client_options_lib.ClientOptions, dict, None] = None,
    ...
) -> None:
    ...

PicardParis avatar Jul 29 '22 15:07 PicardParis

@PicardParis

Yup, your code looks good. Feel free to open a PR. Otherwise, my team will triage this issue and resolve it, but may take longer.

atulep avatar Aug 15 '22 21:08 atulep

Hi, I thought the library was auto-generated from protobufs. Please confirm that it's not and I'll make a PR.

PicardParis avatar Aug 16 '22 11:08 PicardParis

@PicardParis The library is generated, so the change should be done not in the lib, but in gapic-generator-python (i.e. this repository) instead. The changes are most likely to happen in one of the template files (*.py.j2 files). I would look into changing somethign here: https://github.com/googleapis/gapic-generator-python/blob/main/gapic/templates/%25namespace/%25name_%25version/%25sub/services/%25service/client.py.j2#L279

vam-google avatar Aug 26 '22 22:08 vam-google

@atulep @vam-google

  • Thanks for the explanation & pointer
  • I made the tentative PR#1431

PicardParis avatar Sep 06 '22 16:09 PicardParis