Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ jobs:
PY_VER_MYPY: ${{matrix.py-ver-mypy-protobuf}}
PYTHON_PROTOBUF_VERSION: ${{matrix.protobuf-version}}
VALIDATE: 1
TEST_THIRD_PARTY: 1
run: |
./run_test.sh

Expand Down Expand Up @@ -108,6 +109,8 @@ jobs:
with:
# By default, shellcheck tries to make sure any external files referenced actually exist
shellcheck_flags: -e SC1091
exclude: |
*/third_party/*

sanity_check_windows:
name: Sanity Check Windows Executable
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@ __pycache__/
.DS_Store
/venv_*
/protoc_*
/third_party
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
## Upcoming

- Use `builtins.property` to handle conflicts with fields named `property`
- Mangle all non provided message type imports, this prevents conflicts with field names like `collections`, `builtins`, etc.
- Do not mangle message imports, as that would be a breaking change.
- BREAKING: Refactor import statements
- Move to model similar to protoc pyi generator. This prevents name collisions in field names
- `from test.a.b import c as _c`
- If multiple names collied, append `_{count}`
- `from test.a.x import c as _c_1`
- Fix bug in duplicate package name imports

## 4.0.0

- BREAKING: Drop support for `py_generic_services` as it was removed from the protobuf compiler starting in version 6.30
Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ protoc --python_out=output/location --mypy_grpc_out=generate_concrete_servicer_s

### `sync_only/async_only`

By default, generated GRPC stubs are compatible with both sync and async variants. If you only
By default, generated GRPC stubs are compatible with both sync and async variants. If you only
want sync or async GRPC stubs, use this option:

```
Expand Down Expand Up @@ -458,6 +458,10 @@ mypy --target-version=2.7 {files}
9. `uv run twine upload --repository testpypi dist/*`
10. `uv run twine upload dist/*`

## 3rd Party Tests

3rd Party proto files can be added in `run_tests.sh`, they should be cloned in, generated, type checked, then cleaned up.

## Contributing

Contributions to the implementation are welcome. Please run tests using `./run_test.sh`.
Expand Down
62 changes: 31 additions & 31 deletions mypy_protobuf/extensions_pb2.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -3,53 +3,53 @@
isort:skip_file
"""

import builtins
import google.protobuf.descriptor
import google.protobuf.descriptor_pb2
import google.protobuf.internal.extension_dict
import google.protobuf.message
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pb2 as _descriptor_pb2
from google.protobuf import message as _message
from google.protobuf.internal import extension_dict as _extension_dict
import builtins as _builtins
import sys
import typing
import typing as _typing

if sys.version_info >= (3, 10):
import typing as typing_extensions
from typing import TypeAlias as _TypeAlias
else:
import typing_extensions
from typing_extensions import TypeAlias as _TypeAlias

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
DESCRIPTOR: _descriptor.FileDescriptor

@typing.final
class FieldOptions(google.protobuf.message.Message):
DESCRIPTOR: google.protobuf.descriptor.Descriptor
@_typing.final
class FieldOptions(_message.Message):
DESCRIPTOR: _descriptor.Descriptor

CASTTYPE_FIELD_NUMBER: builtins.int
KEYTYPE_FIELD_NUMBER: builtins.int
VALUETYPE_FIELD_NUMBER: builtins.int
casttype: builtins.str
CASTTYPE_FIELD_NUMBER: _builtins.int
KEYTYPE_FIELD_NUMBER: _builtins.int
VALUETYPE_FIELD_NUMBER: _builtins.int
casttype: _builtins.str
"""Tells mypy-protobuf to use a specific newtype rather than the normal type for this field."""
keytype: builtins.str
keytype: _builtins.str
"""Tells mypy-protobuf to use a specific type for keys; only makes sense on map fields"""
valuetype: builtins.str
valuetype: _builtins.str
"""Tells mypy-protobuf to use a specific type for values; only makes sense on map fields"""
def __init__(
self,
*,
casttype: builtins.str = ...,
keytype: builtins.str = ...,
valuetype: builtins.str = ...,
casttype: _builtins.str = ...,
keytype: _builtins.str = ...,
valuetype: _builtins.str = ...,
) -> None: ...
_ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["casttype", b"casttype", "keytype", b"keytype", "valuetype", b"valuetype"]
_ClearFieldArgType: _TypeAlias = _typing.Literal["casttype", b"casttype", "keytype", b"keytype", "valuetype", b"valuetype"] # noqa: Y015
def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

Global___FieldOptions: typing_extensions.TypeAlias = FieldOptions
Global___FieldOptions: _TypeAlias = FieldOptions # noqa: Y015

OPTIONS_FIELD_NUMBER: builtins.int
CASTTYPE_FIELD_NUMBER: builtins.int
KEYTYPE_FIELD_NUMBER: builtins.int
VALUETYPE_FIELD_NUMBER: builtins.int
options: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[google.protobuf.descriptor_pb2.FieldOptions, Global___FieldOptions]
OPTIONS_FIELD_NUMBER: _builtins.int
CASTTYPE_FIELD_NUMBER: _builtins.int
KEYTYPE_FIELD_NUMBER: _builtins.int
VALUETYPE_FIELD_NUMBER: _builtins.int
options: _extension_dict._ExtensionFieldDescriptor[_descriptor_pb2.FieldOptions, Global___FieldOptions]
"""Custom field options from mypy-protobuf"""
casttype: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[google.protobuf.descriptor_pb2.FieldOptions, builtins.str]
casttype: _extension_dict._ExtensionFieldDescriptor[_descriptor_pb2.FieldOptions, _builtins.str]
"""Legacy fields. Prefer to use ones within `options` instead."""
keytype: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[google.protobuf.descriptor_pb2.FieldOptions, builtins.str]
valuetype: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[google.protobuf.descriptor_pb2.FieldOptions, builtins.str]
keytype: _extension_dict._ExtensionFieldDescriptor[_descriptor_pb2.FieldOptions, _builtins.str]
valuetype: _extension_dict._ExtensionFieldDescriptor[_descriptor_pb2.FieldOptions, _builtins.str]
Loading
Loading