From c25c68b1c414a3071d8230b9d78d0fd40228507a Mon Sep 17 00:00:00 2001 From: CoolFanyu Date: Thu, 24 Sep 2026 18:02:15 -0700 Subject: [PATCH 1/2] Upgrade protobuf and deapi version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #3691: Upgrade protobuf to 6.33.4. Updated deapi version to 5.3.1 --- deapi/buffer_protocols/pb_6_33_4.py | 50 +++++++++++++++++++++++++++++ deapi/client.py | 2 +- pyproject.toml | 4 +-- 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 deapi/buffer_protocols/pb_6_33_4.py diff --git a/deapi/buffer_protocols/pb_6_33_4.py b/deapi/buffer_protocols/pb_6_33_4.py new file mode 100644 index 00000000..dda3ea91 --- /dev/null +++ b/deapi/buffer_protocols/pb_6_33_4.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: DE.proto +# Protobuf Python Version: 6.33.4 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 6, + 33, + 4, + '', + 'DE.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x08\x44\x45.proto\x12\x0b\x44\x45Messaging\"\xbd\x02\n\x08\x44\x45Packet\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x1a.DEMessaging.DEPacket.Type\x12\x19\n\x11\x63\x61mera_identifier\x18\x02 \x01(\r\x12+\n\x07\x63ommand\x18\x03 \x03(\x0b\x32\x1a.DEMessaging.SingleCommand\x12\x33\n\x0b\x61\x63knowledge\x18\x04 \x03(\x0b\x32\x1e.DEMessaging.SingleAcknowledge\x12,\n\x0b\x64\x61ta_header\x18\x05 \x01(\x0b\x32\x17.DEMessaging.DataHeader\x12\x13\n\x0b\x63\x61mera_name\x18\x06 \x01(\t\"G\n\x04Type\x12\n\n\x06P_NULL\x10\x00\x12\r\n\tP_COMMAND\x10\x01\x12\x11\n\rP_ACKNOWLEDGE\x10\x02\x12\x11\n\rP_DATA_HEADER\x10\x03\"g\n\rSingleCommand\x12\x12\n\ncommand_id\x18\x01 \x01(\r\x12\x14\n\x0c\x63ommand_name\x18\x02 \x01(\t\x12,\n\tparameter\x18\x03 \x03(\x0b\x32\x19.DEMessaging.AnyParameter\"\xf0\x01\n\x0c\x41nyParameter\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.DEMessaging.AnyParameter.Type\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05p_int\x18\x03 \x01(\x11\x12\x0e\n\x06p_bool\x18\x04 \x01(\x08\x12\x10\n\x08p_string\x18\x05 \x01(\t\x12\x0f\n\x07p_float\x18\x06 \x01(\x02\x12\x0f\n\x07p_bytes\x18\x07 \x01(\x0c\"Q\n\x04Type\x12\n\n\x06P_NULL\x10\x00\x12\t\n\x05P_INT\x10\x01\x12\n\n\x06P_BOOL\x10\x02\x12\x0c\n\x08P_STRING\x10\x03\x12\x0b\n\x07P_FLOAT\x10\x04\x12\x0b\n\x07P_BYTES\x10\x05\"]\n\x0b\x41\x63knowledge\x12\x19\n\x11\x63\x61mera_identifier\x18\x01 \x01(\r\x12\x33\n\x0b\x61\x63knowledge\x18\x02 \x03(\x0b\x32\x1e.DEMessaging.SingleAcknowledge\"\x91\x01\n\x11SingleAcknowledge\x12\r\n\x05\x65rror\x18\x01 \x01(\x08\x12\x12\n\ncommand_id\x18\x02 \x01(\r\x12\x14\n\x0c\x63ommand_name\x18\x03 \x01(\t\x12\x15\n\rerror_message\x18\x04 \x01(\t\x12,\n\tparameter\x18\x05 \x03(\x0b\x32\x19.DEMessaging.AnyParameter\"2\n\nDataHeader\x12\x10\n\x08\x62ytesize\x18\x01 \x01(\x04\x12\x12\n\nidentifier\x18\x02 \x01(\tb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'DE_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_DEPACKET']._serialized_start=26 + _globals['_DEPACKET']._serialized_end=343 + _globals['_DEPACKET_TYPE']._serialized_start=272 + _globals['_DEPACKET_TYPE']._serialized_end=343 + _globals['_SINGLECOMMAND']._serialized_start=345 + _globals['_SINGLECOMMAND']._serialized_end=448 + _globals['_ANYPARAMETER']._serialized_start=451 + _globals['_ANYPARAMETER']._serialized_end=691 + _globals['_ANYPARAMETER_TYPE']._serialized_start=610 + _globals['_ANYPARAMETER_TYPE']._serialized_end=691 + _globals['_ACKNOWLEDGE']._serialized_start=693 + _globals['_ACKNOWLEDGE']._serialized_end=786 + _globals['_SINGLEACKNOWLEDGE']._serialized_start=789 + _globals['_SINGLEACKNOWLEDGE']._serialized_end=934 + _globals['_DATAHEADER']._serialized_start=936 + _globals['_DATAHEADER']._serialized_end=986 +# @@protoc_insertion_point(module_scope) diff --git a/deapi/client.py b/deapi/client.py index 93c1ea9c..0708f378 100644 --- a/deapi/client.py +++ b/deapi/client.py @@ -44,7 +44,7 @@ ) -from deapi.buffer_protocols import pb +from deapi.buffer_protocols import pb_6_33_4 as pb from deapi.version import version, commandVersion from deapi.version import commandVersion as cVersion from deapi.wrappers import write_only, disable_scan, deprecated_argument diff --git a/pyproject.toml b/pyproject.toml index 5a1e3b26..ac5bf021 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ classifiers = [ ] dependencies = [ "numpy>=1.20.0", - "protobuf>=3.20.0", + "protobuf>=6.33.5,<7", "pillow", "matplotlib", "scipy", @@ -26,7 +26,7 @@ dependencies = [ "pywin32; platform_system == 'Windows'", ] description = "API for DE Server" -version = "5.3.0" +version = "5.3.1" keywords = [ "EELS", "STEM", From ae5dc4c50a8b59d0f67ed3af4ff7e52b68b7c0ef Mon Sep 17 00:00:00 2001 From: Carter Francis Date: Fri, 25 Sep 2026 12:35:15 -0500 Subject: [PATCH 2/2] Select protobuf 6.33 gencode in buffer_protocols and require Python >= 3.10 - Pick pb_6_33_4 in buffer_protocols/__init__.py instead of bypassing it in client.py - Require Python >= 3.10 so the protobuf>=6.33.5 pin resolves - Update the oldest CI job to Python 3.10 / protobuf 6.33.5 - Revert the manual version bump (handled by the Prepare Release workflow) - Add towncrier fragment and apply black formatting --- .github/workflows/build.yaml | 4 +-- deapi/buffer_protocols/__init__.py | 3 +- deapi/buffer_protocols/pb_6_33_4.py | 51 ++++++++++++++--------------- deapi/client.py | 2 +- pyproject.toml | 7 ++-- upcoming_changes/64.maintenance.rst | 1 + 6 files changed, 32 insertions(+), 36 deletions(-) create mode 100644 upcoming_changes/64.maintenance.rst diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 26669083..efe91772 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -20,8 +20,8 @@ jobs: python-version: ["3.12", "3.13"] include: - os: ubuntu-latest - python-version: "3.11" - DEPENDENCIES: protobuf==5.26.0 + python-version: "3.10" + DEPENDENCIES: protobuf==6.33.5 LABEL: -oldest steps: - uses: actions/checkout@v4 diff --git a/deapi/buffer_protocols/__init__.py b/deapi/buffer_protocols/__init__.py index 61ab12a8..0e10b797 100644 --- a/deapi/buffer_protocols/__init__.py +++ b/deapi/buffer_protocols/__init__.py @@ -17,8 +17,7 @@ long = int # python 3 no longer has int if int(pyVersion[1]) >= 10: - # import pb_3_19_3 as pb - import deapi.buffer_protocols.pb_3_23_3 as pb + import deapi.buffer_protocols.pb_6_33_4 as pb elif int(pyVersion[1]) >= 8: import deapi.buffer_protocols.pb_3_11_4 as pb else: diff --git a/deapi/buffer_protocols/pb_6_33_4.py b/deapi/buffer_protocols/pb_6_33_4.py index dda3ea91..1c1e482a 100644 --- a/deapi/buffer_protocols/pb_6_33_4.py +++ b/deapi/buffer_protocols/pb_6_33_4.py @@ -4,47 +4,44 @@ # source: DE.proto # Protobuf Python Version: 6.33.4 """Generated protocol buffer code.""" + from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder + _runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 6, - 33, - 4, - '', - 'DE.proto' + _runtime_version.Domain.PUBLIC, 6, 33, 4, "", "DE.proto" ) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x08\x44\x45.proto\x12\x0b\x44\x45Messaging\"\xbd\x02\n\x08\x44\x45Packet\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x1a.DEMessaging.DEPacket.Type\x12\x19\n\x11\x63\x61mera_identifier\x18\x02 \x01(\r\x12+\n\x07\x63ommand\x18\x03 \x03(\x0b\x32\x1a.DEMessaging.SingleCommand\x12\x33\n\x0b\x61\x63knowledge\x18\x04 \x03(\x0b\x32\x1e.DEMessaging.SingleAcknowledge\x12,\n\x0b\x64\x61ta_header\x18\x05 \x01(\x0b\x32\x17.DEMessaging.DataHeader\x12\x13\n\x0b\x63\x61mera_name\x18\x06 \x01(\t\"G\n\x04Type\x12\n\n\x06P_NULL\x10\x00\x12\r\n\tP_COMMAND\x10\x01\x12\x11\n\rP_ACKNOWLEDGE\x10\x02\x12\x11\n\rP_DATA_HEADER\x10\x03\"g\n\rSingleCommand\x12\x12\n\ncommand_id\x18\x01 \x01(\r\x12\x14\n\x0c\x63ommand_name\x18\x02 \x01(\t\x12,\n\tparameter\x18\x03 \x03(\x0b\x32\x19.DEMessaging.AnyParameter\"\xf0\x01\n\x0c\x41nyParameter\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.DEMessaging.AnyParameter.Type\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05p_int\x18\x03 \x01(\x11\x12\x0e\n\x06p_bool\x18\x04 \x01(\x08\x12\x10\n\x08p_string\x18\x05 \x01(\t\x12\x0f\n\x07p_float\x18\x06 \x01(\x02\x12\x0f\n\x07p_bytes\x18\x07 \x01(\x0c\"Q\n\x04Type\x12\n\n\x06P_NULL\x10\x00\x12\t\n\x05P_INT\x10\x01\x12\n\n\x06P_BOOL\x10\x02\x12\x0c\n\x08P_STRING\x10\x03\x12\x0b\n\x07P_FLOAT\x10\x04\x12\x0b\n\x07P_BYTES\x10\x05\"]\n\x0b\x41\x63knowledge\x12\x19\n\x11\x63\x61mera_identifier\x18\x01 \x01(\r\x12\x33\n\x0b\x61\x63knowledge\x18\x02 \x03(\x0b\x32\x1e.DEMessaging.SingleAcknowledge\"\x91\x01\n\x11SingleAcknowledge\x12\r\n\x05\x65rror\x18\x01 \x01(\x08\x12\x12\n\ncommand_id\x18\x02 \x01(\r\x12\x14\n\x0c\x63ommand_name\x18\x03 \x01(\t\x12\x15\n\rerror_message\x18\x04 \x01(\t\x12,\n\tparameter\x18\x05 \x03(\x0b\x32\x19.DEMessaging.AnyParameter\"2\n\nDataHeader\x12\x10\n\x08\x62ytesize\x18\x01 \x01(\x04\x12\x12\n\nidentifier\x18\x02 \x01(\tb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x08\x44\x45.proto\x12\x0b\x44\x45Messaging"\xbd\x02\n\x08\x44\x45Packet\x12(\n\x04type\x18\x01 \x01(\x0e\x32\x1a.DEMessaging.DEPacket.Type\x12\x19\n\x11\x63\x61mera_identifier\x18\x02 \x01(\r\x12+\n\x07\x63ommand\x18\x03 \x03(\x0b\x32\x1a.DEMessaging.SingleCommand\x12\x33\n\x0b\x61\x63knowledge\x18\x04 \x03(\x0b\x32\x1e.DEMessaging.SingleAcknowledge\x12,\n\x0b\x64\x61ta_header\x18\x05 \x01(\x0b\x32\x17.DEMessaging.DataHeader\x12\x13\n\x0b\x63\x61mera_name\x18\x06 \x01(\t"G\n\x04Type\x12\n\n\x06P_NULL\x10\x00\x12\r\n\tP_COMMAND\x10\x01\x12\x11\n\rP_ACKNOWLEDGE\x10\x02\x12\x11\n\rP_DATA_HEADER\x10\x03"g\n\rSingleCommand\x12\x12\n\ncommand_id\x18\x01 \x01(\r\x12\x14\n\x0c\x63ommand_name\x18\x02 \x01(\t\x12,\n\tparameter\x18\x03 \x03(\x0b\x32\x19.DEMessaging.AnyParameter"\xf0\x01\n\x0c\x41nyParameter\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.DEMessaging.AnyParameter.Type\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05p_int\x18\x03 \x01(\x11\x12\x0e\n\x06p_bool\x18\x04 \x01(\x08\x12\x10\n\x08p_string\x18\x05 \x01(\t\x12\x0f\n\x07p_float\x18\x06 \x01(\x02\x12\x0f\n\x07p_bytes\x18\x07 \x01(\x0c"Q\n\x04Type\x12\n\n\x06P_NULL\x10\x00\x12\t\n\x05P_INT\x10\x01\x12\n\n\x06P_BOOL\x10\x02\x12\x0c\n\x08P_STRING\x10\x03\x12\x0b\n\x07P_FLOAT\x10\x04\x12\x0b\n\x07P_BYTES\x10\x05"]\n\x0b\x41\x63knowledge\x12\x19\n\x11\x63\x61mera_identifier\x18\x01 \x01(\r\x12\x33\n\x0b\x61\x63knowledge\x18\x02 \x03(\x0b\x32\x1e.DEMessaging.SingleAcknowledge"\x91\x01\n\x11SingleAcknowledge\x12\r\n\x05\x65rror\x18\x01 \x01(\x08\x12\x12\n\ncommand_id\x18\x02 \x01(\r\x12\x14\n\x0c\x63ommand_name\x18\x03 \x01(\t\x12\x15\n\rerror_message\x18\x04 \x01(\t\x12,\n\tparameter\x18\x05 \x03(\x0b\x32\x19.DEMessaging.AnyParameter"2\n\nDataHeader\x12\x10\n\x08\x62ytesize\x18\x01 \x01(\x04\x12\x12\n\nidentifier\x18\x02 \x01(\tb\x06proto3' +) _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'DE_pb2', _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "DE_pb2", _globals) if not _descriptor._USE_C_DESCRIPTORS: - DESCRIPTOR._loaded_options = None - _globals['_DEPACKET']._serialized_start=26 - _globals['_DEPACKET']._serialized_end=343 - _globals['_DEPACKET_TYPE']._serialized_start=272 - _globals['_DEPACKET_TYPE']._serialized_end=343 - _globals['_SINGLECOMMAND']._serialized_start=345 - _globals['_SINGLECOMMAND']._serialized_end=448 - _globals['_ANYPARAMETER']._serialized_start=451 - _globals['_ANYPARAMETER']._serialized_end=691 - _globals['_ANYPARAMETER_TYPE']._serialized_start=610 - _globals['_ANYPARAMETER_TYPE']._serialized_end=691 - _globals['_ACKNOWLEDGE']._serialized_start=693 - _globals['_ACKNOWLEDGE']._serialized_end=786 - _globals['_SINGLEACKNOWLEDGE']._serialized_start=789 - _globals['_SINGLEACKNOWLEDGE']._serialized_end=934 - _globals['_DATAHEADER']._serialized_start=936 - _globals['_DATAHEADER']._serialized_end=986 + DESCRIPTOR._loaded_options = None + _globals["_DEPACKET"]._serialized_start = 26 + _globals["_DEPACKET"]._serialized_end = 343 + _globals["_DEPACKET_TYPE"]._serialized_start = 272 + _globals["_DEPACKET_TYPE"]._serialized_end = 343 + _globals["_SINGLECOMMAND"]._serialized_start = 345 + _globals["_SINGLECOMMAND"]._serialized_end = 448 + _globals["_ANYPARAMETER"]._serialized_start = 451 + _globals["_ANYPARAMETER"]._serialized_end = 691 + _globals["_ANYPARAMETER_TYPE"]._serialized_start = 610 + _globals["_ANYPARAMETER_TYPE"]._serialized_end = 691 + _globals["_ACKNOWLEDGE"]._serialized_start = 693 + _globals["_ACKNOWLEDGE"]._serialized_end = 786 + _globals["_SINGLEACKNOWLEDGE"]._serialized_start = 789 + _globals["_SINGLEACKNOWLEDGE"]._serialized_end = 934 + _globals["_DATAHEADER"]._serialized_start = 936 + _globals["_DATAHEADER"]._serialized_end = 986 # @@protoc_insertion_point(module_scope) diff --git a/deapi/client.py b/deapi/client.py index 0708f378..93c1ea9c 100644 --- a/deapi/client.py +++ b/deapi/client.py @@ -44,7 +44,7 @@ ) -from deapi.buffer_protocols import pb_6_33_4 as pb +from deapi.buffer_protocols import pb from deapi.version import version, commandVersion from deapi.version import commandVersion as cVersion from deapi.wrappers import write_only, disable_scan, deprecated_argument diff --git a/pyproject.toml b/pyproject.toml index ac5bf021..60751705 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,11 +8,10 @@ classifiers = [ "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Operating System :: OS Independent", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Topic :: Scientific/Engineering", ] dependencies = [ @@ -26,7 +25,7 @@ dependencies = [ "pywin32; platform_system == 'Windows'", ] description = "API for DE Server" -version = "5.3.1" +version = "5.3.0" keywords = [ "EELS", "STEM", @@ -37,7 +36,7 @@ keywords = [ "4D STEM", ] name = "deapi" -requires-python = ">=3.8" +requires-python = ">=3.10" [tool.setuptools.packages.find] include = ["deapi*", "deapi.*"] diff --git a/upcoming_changes/64.maintenance.rst b/upcoming_changes/64.maintenance.rst new file mode 100644 index 00000000..775f687e --- /dev/null +++ b/upcoming_changes/64.maintenance.rst @@ -0,0 +1 @@ +Bumped the google protobuf version to 6.33 and dropped support for Python < 3.10. Closes #3691