Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package micropython-lib for openSUSE:Factory
checked in at 2025-08-15 21:52:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/micropython-lib (Old)
and /work/SRC/openSUSE:Factory/.micropython-lib.new.1085 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "micropython-lib"
Fri Aug 15 21:52:36 2025 rev:4 rq:1299774 version:1.26.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/micropython-lib/micropython-lib.changes
2025-04-20 20:03:41.362382206 +0200
+++
/work/SRC/openSUSE:Factory/.micropython-lib.new.1085/micropython-lib.changes
2025-08-15 21:54:13.217508628 +0200
@@ -1,0 +2,20 @@
+Fri Aug 15 08:21:31 UTC 2025 - Dominik Heidler <[email protected]>
+
+- Update to 1.26.0
+ * aiorepl: Handle stream shutdown.
+ * aiohttp: Fix partial reads by using readexactly.
+ * abc: Add ABC base class.
+ * aioble-l2cap: Raise correct error if l2cap disconnects during send.
+ * logging: Allow logging.exception helper to handle tracebacks.
+ * errno: Add ENOTCONN constant.
+ * aiorepl: Use blocking reads for raw REPL and raw paste.
+ * urllib.urequest: Add support for headers to urequest.urlopen.
+ * tools/verifygitlog.py: Sync with changes from the main repo.
+ * utop: Print IDF heap details.
+ * utop: Print MicroPython memory info.
+ * utop: Add initial implementation for ESP32.
+ * all: Apply Ruff 0.11.6 reformatting changes.
+ * top: Bump the Ruff version to 0.11.6.
+ * lora: Fix SNR value in SX126x received packets.
+
+-------------------------------------------------------------------
Old:
----
micropython-lib-1.25.0.tar.gz
New:
----
micropython-lib-1.26.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ micropython-lib.spec ++++++
--- /var/tmp/diff_new_pack.MDDfKc/_old 2025-08-15 21:54:13.713529253 +0200
+++ /var/tmp/diff_new_pack.MDDfKc/_new 2025-08-15 21:54:13.713529253 +0200
@@ -1,7 +1,7 @@
#
# spec file for package micropython-lib
#
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: micropython-lib
-Version: 1.25.0
+Version: 1.26.0
Release: 0
Summary: Core Python libraries ported to MicroPython
License: MIT AND Python-2.0
++++++ micropython-lib-1.25.0.tar.gz -> micropython-lib-1.26.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/micropython-lib-1.25.0/.github/workflows/ruff.yml
new/micropython-lib-1.26.0/.github/workflows/ruff.yml
--- old/micropython-lib-1.25.0/.github/workflows/ruff.yml 2025-04-14
02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/.github/workflows/ruff.yml 2025-07-31
16:59:51.000000000 +0200
@@ -6,6 +6,7 @@
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- - run: pip install --user ruff==0.1.2
+ # Version should be kept in sync with .pre-commit_config.yaml & also
micropython
+ - run: pip install --user ruff==0.11.6
- run: ruff check --output-format=github .
- run: ruff format --diff .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/micropython-lib-1.25.0/.pre-commit-config.yaml
new/micropython-lib-1.26.0/.pre-commit-config.yaml
--- old/micropython-lib-1.25.0/.pre-commit-config.yaml 2025-04-14
02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/.pre-commit-config.yaml 2025-07-31
16:59:51.000000000 +0200
@@ -8,7 +8,8 @@
verbose: true
stages: [commit-msg]
- repo: https://github.com/charliermarsh/ruff-pre-commit
- rev: v0.1.2
+ # Version should be kept in sync with .github/workflows/ruff.yml & also
micropython
+ rev: v0.11.6
hooks:
- id: ruff
id: ruff-format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/aiorepl/aiorepl.py
new/micropython-lib-1.26.0/micropython/aiorepl/aiorepl.py
--- old/micropython-lib-1.25.0/micropython/aiorepl/aiorepl.py 2025-04-14
02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/aiorepl/aiorepl.py 2025-07-31
16:59:51.000000000 +0200
@@ -114,6 +114,8 @@
curs = 0 # cursor offset from end of cmd buffer
while True:
b = await s.read(1)
+ if not b: # Handle EOF/empty read
+ break
pc = c # save previous character
c = ord(b)
pt = t # save previous time
@@ -132,7 +134,7 @@
continue
if curs:
# move cursor to end of the line
- sys.stdout.write("\x1B[{}C".format(curs))
+ sys.stdout.write("\x1b[{}C".format(curs))
curs = 0
sys.stdout.write("\n")
if cmd:
@@ -153,15 +155,15 @@
if curs:
cmd = "".join((cmd[: -curs - 1], cmd[-curs:]))
sys.stdout.write(
- "\x08\x1B[K"
+ "\x08\x1b[K"
) # move cursor back, erase to end of line
sys.stdout.write(cmd[-curs:]) # redraw line
- sys.stdout.write("\x1B[{}D".format(curs)) #
reset cursor location
+ sys.stdout.write("\x1b[{}D".format(curs)) #
reset cursor location
else:
cmd = cmd[:-1]
sys.stdout.write("\x08 \x08")
elif c == CHAR_CTRL_A:
- await raw_repl(s, g)
+ raw_repl(sys.stdin, g)
break
elif c == CHAR_CTRL_B:
continue
@@ -207,21 +209,21 @@
elif key == "[D": # left
if curs < len(cmd) - 1:
curs += 1
- sys.stdout.write("\x1B")
+ sys.stdout.write("\x1b")
sys.stdout.write(key)
elif key == "[C": # right
if curs:
curs -= 1
- sys.stdout.write("\x1B")
+ sys.stdout.write("\x1b")
sys.stdout.write(key)
elif key == "[H": # home
pcurs = curs
curs = len(cmd)
- sys.stdout.write("\x1B[{}D".format(curs - pcurs))
# move cursor left
+ sys.stdout.write("\x1b[{}D".format(curs - pcurs))
# move cursor left
elif key == "[F": # end
pcurs = curs
curs = 0
- sys.stdout.write("\x1B[{}C".format(pcurs)) # move
cursor right
+ sys.stdout.write("\x1b[{}C".format(pcurs)) # move
cursor right
else:
# sys.stdout.write("\\x")
# sys.stdout.write(hex(c))
@@ -231,7 +233,7 @@
# inserting into middle of line
cmd = "".join((cmd[:-curs], b, cmd[-curs:]))
sys.stdout.write(cmd[-curs - 1 :]) # redraw line to
end
- sys.stdout.write("\x1B[{}D".format(curs)) # reset
cursor location
+ sys.stdout.write("\x1b[{}D".format(curs)) # reset
cursor location
else:
sys.stdout.write(b)
cmd += b
@@ -239,7 +241,7 @@
micropython.kbd_intr(3)
-async def raw_paste(s, g, window=512):
+def raw_paste(s, window=512):
sys.stdout.write("R\x01") # supported
sys.stdout.write(bytearray([window & 0xFF, window >> 8, 0x01]).decode())
eof = False
@@ -248,7 +250,7 @@
file = b""
while not eof:
for idx in range(window):
- b = await s.read(1)
+ b = s.read(1)
c = ord(b)
if c == CHAR_CTRL_C or c == CHAR_CTRL_D:
# end of file
@@ -267,7 +269,12 @@
return file
-async def raw_repl(s: asyncio.StreamReader, g: dict):
+def raw_repl(s, g: dict):
+ """
+ This function is blocking to prevent other
+ async tasks from writing to the stdio stream and
+ breaking the raw repl session.
+ """
heading = "raw REPL; CTRL-B to exit\n"
line = ""
sys.stdout.write(heading)
@@ -276,7 +283,7 @@
line = ""
sys.stdout.write(">")
while True:
- b = await s.read(1)
+ b = s.read(1)
c = ord(b)
if c == CHAR_CTRL_A:
rline = line
@@ -284,7 +291,7 @@
if len(rline) == 2 and ord(rline[0]) == CHAR_CTRL_E:
if rline[1] == "A":
- line = await raw_paste(s, g)
+ line = raw_paste(s)
break
else:
# reset raw REPL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/aiorepl/manifest.py
new/micropython-lib-1.26.0/micropython/aiorepl/manifest.py
--- old/micropython-lib-1.25.0/micropython/aiorepl/manifest.py 2025-04-14
02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/aiorepl/manifest.py 2025-07-31
16:59:51.000000000 +0200
@@ -1,5 +1,5 @@
metadata(
- version="0.2.0",
+ version="0.2.2",
description="Provides an asynchronous REPL that can run concurrently with
an asyncio, also allowing await expressions.",
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/bluetooth/aioble/aioble/l2cap.py
new/micropython-lib-1.26.0/micropython/bluetooth/aioble/aioble/l2cap.py
--- old/micropython-lib-1.25.0/micropython/bluetooth/aioble/aioble/l2cap.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/bluetooth/aioble/aioble/l2cap.py
2025-07-31 16:59:51.000000000 +0200
@@ -133,7 +133,6 @@
# Waits until the channel is free and then sends buf.
# If the buffer is larger than the MTU it will be sent in chunks.
async def send(self, buf, timeout_ms=None, chunk_size=None):
- self._assert_connected()
offset = 0
chunk_size = min(self.our_mtu * 2, self.peer_mtu, chunk_size or
self.peer_mtu)
mv = memoryview(buf)
@@ -141,6 +140,7 @@
if self._stalled:
await self.flush(timeout_ms)
# l2cap_send returns True if you can send immediately.
+ self._assert_connected()
self._stalled = not ble.l2cap_send(
self._connection._conn_handle,
self._cid,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/bluetooth/aioble/examples/l2cap_file_client.py
new/micropython-lib-1.26.0/micropython/bluetooth/aioble/examples/l2cap_file_client.py
---
old/micropython-lib-1.25.0/micropython/bluetooth/aioble/examples/l2cap_file_client.py
2025-04-14 02:26:38.000000000 +0200
+++
new/micropython-lib-1.26.0/micropython/bluetooth/aioble/examples/l2cap_file_client.py
2025-07-31 16:59:51.000000000 +0200
@@ -88,7 +88,7 @@
await self._command(_COMMAND_SEND, path.encode())
- with open(dest, "wb") as f: # noqa: ASYNC101
+ with open(dest, "wb") as f: # noqa: ASYNC230
total = 0
buf = bytearray(self._channel.our_mtu)
mv = memoryview(buf)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/bluetooth/aioble/examples/l2cap_file_server.py
new/micropython-lib-1.26.0/micropython/bluetooth/aioble/examples/l2cap_file_server.py
---
old/micropython-lib-1.25.0/micropython/bluetooth/aioble/examples/l2cap_file_server.py
2025-04-14 02:26:38.000000000 +0200
+++
new/micropython-lib-1.26.0/micropython/bluetooth/aioble/examples/l2cap_file_server.py
2025-07-31 16:59:51.000000000 +0200
@@ -83,7 +83,7 @@
if send_file:
print("Sending:", send_file)
- with open(send_file, "rb") as f: # noqa: ASYNC101
+ with open(send_file, "rb") as f: # noqa: ASYNC230
buf = bytearray(channel.peer_mtu)
mv = memoryview(buf)
while n := f.readinto(buf):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/bluetooth/aioble/manifest.py
new/micropython-lib-1.26.0/micropython/bluetooth/aioble/manifest.py
--- old/micropython-lib-1.25.0/micropython/bluetooth/aioble/manifest.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/bluetooth/aioble/manifest.py
2025-07-31 16:59:51.000000000 +0200
@@ -3,7 +3,7 @@
# code. This allows (for development purposes) all the files to live in the
# one directory.
-metadata(version="0.6.0")
+metadata(version="0.6.1")
# Default installation gives you everything. Install the individual
# components (or a combination of them) if you want a more minimal install.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/bluetooth/aioble-l2cap/manifest.py
new/micropython-lib-1.26.0/micropython/bluetooth/aioble-l2cap/manifest.py
--- old/micropython-lib-1.25.0/micropython/bluetooth/aioble-l2cap/manifest.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/bluetooth/aioble-l2cap/manifest.py
2025-07-31 16:59:51.000000000 +0200
@@ -1,4 +1,4 @@
-metadata(version="0.2.0")
+metadata(version="0.2.1")
require("aioble-core")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/drivers/codec/wm8960/wm8960.py
new/micropython-lib-1.26.0/micropython/drivers/codec/wm8960/wm8960.py
--- old/micropython-lib-1.25.0/micropython/drivers/codec/wm8960/wm8960.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/drivers/codec/wm8960/wm8960.py
2025-07-31 16:59:51.000000000 +0200
@@ -331,8 +331,7 @@
sysclk = 11289600
else:
sysclk = 12288000
- if sysclk < sample_rate * 256:
- sysclk = sample_rate * 256
+ sysclk = max(sysclk, sample_rate * 256)
if mclk_freq is None:
mclk_freq = sysclk
else: # sysclk_source == SYSCLK_MCLK
@@ -691,10 +690,8 @@
def alc_gain(self, target=-12, max_gain=30, min_gain=-17.25,
noise_gate=-78):
def limit(value, minval, maxval):
value = int(value)
- if value < minval:
- value = minval
- if value > maxval:
- value = maxval
+ value = max(value, minval)
+ value = min(value, maxval)
return value
target = limit((16 + (target * 2) // 3), 0, 15)
@@ -718,8 +715,7 @@
while value > 1:
value >>= 1
lb += 1
- if lb > limit:
- lb = limit
+ lb = min(lb, limit)
return lb
attack = logb(attack / 6, 7)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/drivers/display/lcd160cr/lcd160cr.py
new/micropython-lib-1.26.0/micropython/drivers/display/lcd160cr/lcd160cr.py
--- old/micropython-lib-1.25.0/micropython/drivers/display/lcd160cr/lcd160cr.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/drivers/display/lcd160cr/lcd160cr.py
2025-07-31 16:59:51.000000000 +0200
@@ -189,10 +189,8 @@
c[3] = h - 1
else:
if c[0] == c[2]:
- if c[1] < 0:
- c[1] = 0
- if c[3] < 0:
- c[3] = 0
+ c[1] = max(c[1], 0)
+ c[3] = max(c[3], 0)
else:
if c[3] < c[1]:
c[0], c[2] = c[2], c[0]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/drivers/imu/lsm9ds1/lsm9ds1.py
new/micropython-lib-1.26.0/micropython/drivers/imu/lsm9ds1/lsm9ds1.py
--- old/micropython-lib-1.25.0/micropython/drivers/imu/lsm9ds1/lsm9ds1.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/drivers/imu/lsm9ds1/lsm9ds1.py
2025-07-31 16:59:51.000000000 +0200
@@ -43,6 +43,7 @@
print("")
time.sleep_ms(100)
"""
+
import array
from micropython import const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/drivers/radio/nrf24l01/nrf24l01.py
new/micropython-lib-1.26.0/micropython/drivers/radio/nrf24l01/nrf24l01.py
--- old/micropython-lib-1.25.0/micropython/drivers/radio/nrf24l01/nrf24l01.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/drivers/radio/nrf24l01/nrf24l01.py
2025-07-31 16:59:51.000000000 +0200
@@ -1,5 +1,4 @@
-"""NRF24L01 driver for MicroPython
-"""
+"""NRF24L01 driver for MicroPython"""
from micropython import const
import utime
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/drivers/sensor/hts221/hts221.py
new/micropython-lib-1.26.0/micropython/drivers/sensor/hts221/hts221.py
--- old/micropython-lib-1.25.0/micropython/drivers/sensor/hts221/hts221.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/drivers/sensor/hts221/hts221.py
2025-07-31 16:59:51.000000000 +0200
@@ -52,7 +52,7 @@
# Set configuration register
# Humidity and temperature average configuration
- self.bus.writeto_mem(self.slv_addr, 0x10, b"\x1B")
+ self.bus.writeto_mem(self.slv_addr, 0x10, b"\x1b")
# Set control register
# PD | BDU | ODR
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/drivers/sensor/lps22h/lps22h.py
new/micropython-lib-1.26.0/micropython/drivers/sensor/lps22h/lps22h.py
--- old/micropython-lib-1.25.0/micropython/drivers/sensor/lps22h/lps22h.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/drivers/sensor/lps22h/lps22h.py
2025-07-31 16:59:51.000000000 +0200
@@ -37,6 +37,7 @@
print("Pressure: %.2f hPa Temperature: %.2f C"%(lps.pressure(),
lps.temperature()))
time.sleep_ms(10)
"""
+
import machine
from micropython import const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/espflash/espflash.py
new/micropython-lib-1.26.0/micropython/espflash/espflash.py
--- old/micropython-lib-1.25.0/micropython/espflash/espflash.py 2025-04-14
02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/espflash/espflash.py 2025-07-31
16:59:51.000000000 +0200
@@ -113,22 +113,22 @@
raise Exception(f"Register poll timeout. Addr: 0x{addr:02X} Flag:
0x{flag:02X}.")
def _write_slip(self, pkt):
- pkt = pkt.replace(b"\xDB", b"\xdb\xdd").replace(b"\xc0", b"\xdb\xdc")
- self.uart.write(b"\xC0" + pkt + b"\xC0")
+ pkt = pkt.replace(b"\xdb", b"\xdb\xdd").replace(b"\xc0", b"\xdb\xdc")
+ self.uart.write(b"\xc0" + pkt + b"\xc0")
self._log(pkt)
def _read_slip(self):
pkt = None
# Find the packet start.
- if self.uart.read(1) == b"\xC0":
+ if self.uart.read(1) == b"\xc0":
pkt = bytearray()
while True:
b = self.uart.read(1)
- if b is None or b == b"\xC0":
+ if b is None or b == b"\xc0":
break
pkt += b
- pkt = pkt.replace(b"\xDB\xDD", b"\xDB").replace(b"\xDB\xDC",
b"\xC0")
- self._log(b"\xC0" + pkt + b"\xC0", False)
+ pkt = pkt.replace(b"\xdb\xdd", b"\xdb").replace(b"\xdb\xdc",
b"\xc0")
+ self._log(b"\xc0" + pkt + b"\xc0", False)
return pkt
def _strerror(self, err):
@@ -230,7 +230,7 @@
raise Exception(f"Unexpected flash size bits: 0x{flash_bits:02X}.")
flash_size = 2**flash_bits
- print(f"Flash size {flash_size/1024/1024} MBytes")
+ print(f"Flash size {flash_size / 1024 / 1024} MBytes")
return flash_size
def flash_attach(self):
@@ -265,7 +265,7 @@
self.md5sum.update(buf)
# The last data block should be padded to the block size with
0xFF bytes.
if len(buf) < blksize:
- buf += b"\xFF" * (blksize - len(buf))
+ buf += b"\xff" * (blksize - len(buf))
checksum = self._checksum(buf)
if seq % erase_blocks == 0:
# print(f"Erasing {seq} -> {seq+erase_blocks}...")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/lora/examples/reliable_delivery/sender.py
new/micropython-lib-1.26.0/micropython/lora/examples/reliable_delivery/sender.py
---
old/micropython-lib-1.25.0/micropython/lora/examples/reliable_delivery/sender.py
2025-04-14 02:26:38.000000000 +0200
+++
new/micropython-lib-1.26.0/micropython/lora/examples/reliable_delivery/sender.py
2025-07-31 16:59:51.000000000 +0200
@@ -149,7 +149,7 @@
delta = time.ticks_diff(maybe_ack.ticks_ms, sent_at)
print(
f"ACKed with RSSI {rssi}, {delta}ms after sent "
- + f"(skew {delta-ACK_DELAY_MS-ack_packet_ms}ms)"
+ + f"(skew {delta - ACK_DELAY_MS - ack_packet_ms}ms)"
)
if adjust_output_power:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/lora/examples/reliable_delivery/sender_async.py
new/micropython-lib-1.26.0/micropython/lora/examples/reliable_delivery/sender_async.py
---
old/micropython-lib-1.25.0/micropython/lora/examples/reliable_delivery/sender_async.py
2025-04-14 02:26:38.000000000 +0200
+++
new/micropython-lib-1.26.0/micropython/lora/examples/reliable_delivery/sender_async.py
2025-07-31 16:59:51.000000000 +0200
@@ -141,7 +141,7 @@
delta = time.ticks_diff(maybe_ack.ticks_ms, sent_at)
print(
f"ACKed with RSSI {rssi}, {delta}ms after sent "
- + f"(skew {delta-ACK_DELAY_MS-ack_packet_ms}ms)"
+ + f"(skew {delta - ACK_DELAY_MS - ack_packet_ms}ms)"
)
if adjust_output_power:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/lora/lora-sx126x/lora/sx126x.py
new/micropython-lib-1.26.0/micropython/lora/lora-sx126x/lora/sx126x.py
--- old/micropython-lib-1.25.0/micropython/lora/lora-sx126x/lora/sx126x.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/lora/lora-sx126x/lora/sx126x.py
2025-07-31 16:59:51.000000000 +0200
@@ -596,8 +596,9 @@
pkt_status = self._cmd("B", _CMD_GET_PACKET_STATUS, n_read=4)
rx_packet.ticks_ms = ticks_ms
- rx_packet.snr = pkt_status[2] # SNR, units: dB *4
- rx_packet.rssi = 0 - pkt_status[1] // 2 # RSSI, units: dBm
+ # SNR units are dB * 4 (signed)
+ rx_packet.rssi, rx_packet.snr = struct.unpack("xBbx", pkt_status)
+ rx_packet.rssi //= -2 # RSSI, units: dBm
rx_packet.crc_error = (flags & _IRQ_CRC_ERR) != 0
return rx_packet
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/lora/lora-sx126x/manifest.py
new/micropython-lib-1.26.0/micropython/lora/lora-sx126x/manifest.py
--- old/micropython-lib-1.25.0/micropython/lora/lora-sx126x/manifest.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/lora/lora-sx126x/manifest.py
2025-07-31 16:59:51.000000000 +0200
@@ -1,3 +1,3 @@
-metadata(version="0.1.4")
+metadata(version="0.1.5")
require("lora")
package("lora")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/senml/examples/actuator.py
new/micropython-lib-1.26.0/micropython/senml/examples/actuator.py
--- old/micropython-lib-1.25.0/micropython/senml/examples/actuator.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/senml/examples/actuator.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
from senml import *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/senml/examples/base.py
new/micropython-lib-1.26.0/micropython/senml/examples/base.py
--- old/micropython-lib-1.25.0/micropython/senml/examples/base.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/senml/examples/base.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
from senml import *
import time
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/senml/examples/basic.py
new/micropython-lib-1.26.0/micropython/senml/examples/basic.py
--- old/micropython-lib-1.25.0/micropython/senml/examples/basic.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/senml/examples/basic.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
from senml import *
import time
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/senml/examples/basic2.py
new/micropython-lib-1.26.0/micropython/senml/examples/basic2.py
--- old/micropython-lib-1.25.0/micropython/senml/examples/basic2.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/senml/examples/basic2.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
from senml import *
import time
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/senml/examples/basic_cbor.py
new/micropython-lib-1.26.0/micropython/senml/examples/basic_cbor.py
--- old/micropython-lib-1.25.0/micropython/senml/examples/basic_cbor.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/senml/examples/basic_cbor.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
from senml import *
import time
import cbor2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/senml/examples/custom_record.py
new/micropython-lib-1.26.0/micropython/senml/examples/custom_record.py
--- old/micropython-lib-1.25.0/micropython/senml/examples/custom_record.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/senml/examples/custom_record.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
from senml import *
import time
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/senml/examples/gateway.py
new/micropython-lib-1.26.0/micropython/senml/examples/gateway.py
--- old/micropython-lib-1.25.0/micropython/senml/examples/gateway.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/senml/examples/gateway.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
from senml import *
import time
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/senml/examples/gateway_actuators.py
new/micropython-lib-1.26.0/micropython/senml/examples/gateway_actuators.py
--- old/micropython-lib-1.25.0/micropython/senml/examples/gateway_actuators.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/senml/examples/gateway_actuators.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
from senml import *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/senml/examples/supported_data_types.py
new/micropython-lib-1.26.0/micropython/senml/examples/supported_data_types.py
---
old/micropython-lib-1.25.0/micropython/senml/examples/supported_data_types.py
2025-04-14 02:26:38.000000000 +0200
+++
new/micropython-lib-1.26.0/micropython/senml/examples/supported_data_types.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
from senml import *
import time
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/senml/senml/__init__.py
new/micropython-lib-1.26.0/micropython/senml/senml/__init__.py
--- old/micropython-lib-1.25.0/micropython/senml/senml/__init__.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/senml/senml/__init__.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
from .senml_base import SenmlBase
from .senml_pack import SenmlPack
from .senml_record import SenmlRecord
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/senml/senml/senml_pack.py
new/micropython-lib-1.26.0/micropython/senml/senml/senml_pack.py
--- old/micropython-lib-1.25.0/micropython/senml/senml/senml_pack.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/senml/senml/senml_pack.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
from senml.senml_record import SenmlRecord
from senml.senml_base import SenmlBase
import json
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/senml/senml/senml_record.py
new/micropython-lib-1.26.0/micropython/senml/senml/senml_record.py
--- old/micropython-lib-1.25.0/micropython/senml/senml/senml_record.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/senml/senml/senml_record.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
import binascii
from senml.senml_base import SenmlBase
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/urllib.urequest/manifest.py
new/micropython-lib-1.26.0/micropython/urllib.urequest/manifest.py
--- old/micropython-lib-1.25.0/micropython/urllib.urequest/manifest.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/urllib.urequest/manifest.py
2025-07-31 16:59:51.000000000 +0200
@@ -1,4 +1,4 @@
-metadata(version="0.7.0")
+metadata(version="0.8.0")
# Originally written by Paul Sokolovsky.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/micropython/urllib.urequest/urllib/urequest.py
new/micropython-lib-1.26.0/micropython/urllib.urequest/urllib/urequest.py
--- old/micropython-lib-1.25.0/micropython/urllib.urequest/urllib/urequest.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/micropython/urllib.urequest/urllib/urequest.py
2025-07-31 16:59:51.000000000 +0200
@@ -1,7 +1,7 @@
import socket
-def urlopen(url, data=None, method="GET"):
+def urlopen(url, data=None, method="GET", headers={}):
if data is not None and method == "GET":
method = "POST"
try:
@@ -40,6 +40,12 @@
s.write(host)
s.write(b"\r\n")
+ for k in headers:
+ s.write(k)
+ s.write(b": ")
+ s.write(headers[k])
+ s.write(b"\r\n")
+
if data:
s.write(b"Content-Length: ")
s.write(str(len(data)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/micropython-lib-1.25.0/micropython/utop/README.md
new/micropython-lib-1.26.0/micropython/utop/README.md
--- old/micropython-lib-1.25.0/micropython/utop/README.md 1970-01-01
01:00:00.000000000 +0100
+++ new/micropython-lib-1.26.0/micropython/utop/README.md 2025-07-31
16:59:51.000000000 +0200
@@ -0,0 +1,12 @@
+# utop
+
+Provides a top-like live overview of the running system.
+
+On the `esp32` port this depends on the `esp32.idf_task_info()` function, which
+can be enabled by adding the following lines to the board `sdkconfig`:
+
+```ini
+CONFIG_FREERTOS_USE_TRACE_FACILITY=y
+CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y
+CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/micropython-lib-1.25.0/micropython/utop/manifest.py
new/micropython-lib-1.26.0/micropython/utop/manifest.py
--- old/micropython-lib-1.25.0/micropython/utop/manifest.py 1970-01-01
01:00:00.000000000 +0100
+++ new/micropython-lib-1.26.0/micropython/utop/manifest.py 2025-07-31
16:59:51.000000000 +0200
@@ -0,0 +1,6 @@
+metadata(
+ version="0.1.0",
+ description="Provides a top-like live overview of the running system.",
+)
+
+module("utop.py")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/micropython-lib-1.25.0/micropython/utop/utop.py
new/micropython-lib-1.26.0/micropython/utop/utop.py
--- old/micropython-lib-1.25.0/micropython/utop/utop.py 1970-01-01
01:00:00.000000000 +0100
+++ new/micropython-lib-1.26.0/micropython/utop/utop.py 2025-07-31
16:59:51.000000000 +0200
@@ -0,0 +1,109 @@
+import micropython
+import time
+
+try:
+ import esp32
+ import _thread
+except ImportError:
+ esp32 = None
+
+
+def top(update_interval_ms=1000, timeout_ms=None, thread_names={}):
+ time_start = time.ticks_ms()
+ previous_total_runtime = None
+ previous_task_runtimes = {}
+ previous_line_count = 0
+ esp32_task_state_names = dict(
+ enumerate(("running", "ready", "blocked", "suspended", "deleted",
"invalid"))
+ )
+
+ while timeout_ms is None or abs(time.ticks_diff(time.ticks_ms(),
time_start)) < timeout_ms:
+ if previous_line_count > 0:
+ print("\x1b[{}A".format(previous_line_count), end="")
+ line_count = 0
+
+ if esp32 is not None:
+ if not hasattr(esp32, "idf_task_info"):
+ print(
+ "INFO: esp32.idf_task_info() is not available, cannot list
active tasks.\x1b[K"
+ )
+ line_count += 1
+ else:
+ print(" CPU% CORE PRIORITY STATE STACKWATERMARK
NAME\x1b[K")
+ line_count += 1
+
+ total_runtime, tasks = esp32.idf_task_info()
+ current_thread_id = _thread.get_ident()
+ tasks.sort(key=lambda t: t[0])
+ for (
+ task_id,
+ task_name,
+ task_state,
+ task_priority,
+ task_runtime,
+ task_stackhighwatermark,
+ task_coreid,
+ ) in tasks:
+ task_runtime_percentage = "-"
+ if (
+ total_runtime != previous_total_runtime
+ and task_id in previous_task_runtimes
+ ):
+ task_runtime_percentage = "{:.2f}%".format(
+ 100
+ * ((task_runtime -
previous_task_runtimes[task_id]) & (2**32 - 1))
+ / ((total_runtime - previous_total_runtime) &
(2**32 - 1))
+ )
+ print(
+ "{:>7} {:>4} {:>8d} {:<9} {:<14d}
{}{}\x1b[K".format(
+ task_runtime_percentage,
+ "-" if task_coreid is None else task_coreid,
+ task_priority,
+ esp32_task_state_names.get(task_state, "unknown"),
+ task_stackhighwatermark,
+ thread_names.get(task_id, task_name),
+ " (*)" if task_id == current_thread_id else "",
+ )
+ )
+ line_count += 1
+
+ previous_task_runtimes[task_id] = task_runtime
+ previous_total_runtime = total_runtime
+ else:
+ print("INFO: Platform does not support listing active
tasks.\x1b[K")
+ line_count += 1
+
+ print("\x1b[K")
+ line_count += 1
+ print("MicroPython ", end="")
+ micropython.mem_info()
+ line_count += 3
+
+ if esp32 is not None:
+ print("\x1b[K")
+ line_count += 1
+ for name, cap in (("data", esp32.HEAP_DATA), ("exec",
esp32.HEAP_EXEC)):
+ heaps = esp32.idf_heap_info(cap)
+ print(
+ "IDF heap ({}): {} regions, {} total, {} free, {} largest
contiguous, {} min free watermark\x1b[K".format(
+ name,
+ len(heaps),
+ sum((h[0] for h in heaps)),
+ sum((h[1] for h in heaps)),
+ max((h[2] for h in heaps)),
+ sum((h[3] for h in heaps)),
+ )
+ )
+ line_count += 1
+
+ if previous_line_count > line_count:
+ for _ in range(previous_line_count - line_count):
+ print("\x1b[K")
+ print("\x1b[{}A".format(previous_line_count - line_count), end="")
+
+ previous_line_count = line_count
+
+ try:
+ time.sleep_ms(update_interval_ms)
+ except KeyboardInterrupt:
+ break
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/micropython-lib-1.25.0/pyproject.toml
new/micropython-lib-1.26.0/pyproject.toml
--- old/micropython-lib-1.25.0/pyproject.toml 2025-04-14 02:26:38.000000000
+0200
+++ new/micropython-lib-1.26.0/pyproject.toml 2025-07-31 16:59:51.000000000
+0200
@@ -64,7 +64,7 @@
"ISC003", # micropython does not support implicit concatenation of f-strings
"PIE810", # micropython does not support passing tuples to .startswith or
.endswith
"PLC1901",
- "PLR1701",
+ "PLR1704", # sometimes desirable to redefine an argument to save code size
"PLR1714",
"PLR5501",
"PLW0602",
@@ -72,6 +72,7 @@
"PLW2901",
"RUF012",
"RUF100",
+ "SIM101",
"W191", # tab-indent, redundant when using formatter
]
line-length = 99
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/python-ecosys/aiohttp/aiohttp/__init__.py
new/micropython-lib-1.26.0/python-ecosys/aiohttp/aiohttp/__init__.py
--- old/micropython-lib-1.25.0/python-ecosys/aiohttp/aiohttp/__init__.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-ecosys/aiohttp/aiohttp/__init__.py
2025-07-31 16:59:51.000000000 +0200
@@ -42,7 +42,9 @@
return data
async def read(self, sz=-1):
- return self._decode(await self.content.read(sz))
+ return self._decode(
+ await (self.content.read(sz) if sz == -1 else
self.content.readexactly(sz))
+ )
async def text(self, encoding="utf-8"):
return (await self.read(int(self._get_header("content-length",
-1)))).decode(encoding)
@@ -66,13 +68,13 @@
self.chunk_size = int(l, 16)
if self.chunk_size == 0:
# End of message
- sep = await self.content.read(2)
+ sep = await self.content.readexactly(2)
assert sep == b"\r\n"
return b""
- data = await self.content.read(min(sz, self.chunk_size))
+ data = await self.content.readexactly(min(sz, self.chunk_size))
self.chunk_size -= len(data)
if self.chunk_size == 0:
- sep = await self.content.read(2)
+ sep = await self.content.readexactly(2)
assert sep == b"\r\n"
return self._decode(data)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/python-ecosys/aiohttp/aiohttp/aiohttp_ws.py
new/micropython-lib-1.26.0/python-ecosys/aiohttp/aiohttp/aiohttp_ws.py
--- old/micropython-lib-1.25.0/python-ecosys/aiohttp/aiohttp/aiohttp_ws.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-ecosys/aiohttp/aiohttp/aiohttp_ws.py
2025-07-31 16:59:51.000000000 +0200
@@ -189,7 +189,7 @@
await self.send(b"", self.CLOSE)
async def _read_frame(self):
- header = await self.reader.read(2)
+ header = await self.reader.readexactly(2)
if len(header) != 2: # pragma: no cover
# raise OSError(32, "Websocket connection closed")
opcode = self.CLOSE
@@ -197,13 +197,13 @@
return opcode, payload
fin, opcode, has_mask, length = self._parse_frame_header(header)
if length == 126: # Magic number, length header is 2 bytes
- (length,) = struct.unpack("!H", await self.reader.read(2))
+ (length,) = struct.unpack("!H", await self.reader.readexactly(2))
elif length == 127: # Magic number, length header is 8 bytes
- (length,) = struct.unpack("!Q", await self.reader.read(8))
+ (length,) = struct.unpack("!Q", await self.reader.readexactly(8))
if has_mask: # pragma: no cover
- mask = await self.reader.read(4)
- payload = await self.reader.read(length)
+ mask = await self.reader.readexactly(4)
+ payload = await self.reader.readexactly(length)
if has_mask: # pragma: no cover
payload = bytes(x ^ mask[i % 4] for i, x in enumerate(payload))
return opcode, payload
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/python-ecosys/aiohttp/manifest.py
new/micropython-lib-1.26.0/python-ecosys/aiohttp/manifest.py
--- old/micropython-lib-1.25.0/python-ecosys/aiohttp/manifest.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-ecosys/aiohttp/manifest.py
2025-07-31 16:59:51.000000000 +0200
@@ -1,6 +1,6 @@
metadata(
description="HTTP client module for MicroPython asyncio module",
- version="0.0.5",
+ version="0.0.6",
pypi="aiohttp",
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/python-ecosys/cbor2/cbor2/__init__.py
new/micropython-lib-1.26.0/python-ecosys/cbor2/cbor2/__init__.py
--- old/micropython-lib-1.25.0/python-ecosys/cbor2/cbor2/__init__.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-ecosys/cbor2/cbor2/__init__.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
from ._decoder import CBORDecoder
from ._decoder import load
from ._decoder import loads
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/python-ecosys/cbor2/cbor2/_decoder.py
new/micropython-lib-1.26.0/python-ecosys/cbor2/cbor2/_decoder.py
--- old/micropython-lib-1.25.0/python-ecosys/cbor2/cbor2/_decoder.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-ecosys/cbor2/cbor2/_decoder.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
import io
import struct
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/python-ecosys/cbor2/cbor2/_encoder.py
new/micropython-lib-1.26.0/python-ecosys/cbor2/cbor2/_encoder.py
--- old/micropython-lib-1.25.0/python-ecosys/cbor2/cbor2/_encoder.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-ecosys/cbor2/cbor2/_encoder.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
import io
import struct
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/python-ecosys/cbor2/examples/cbor_test.py
new/micropython-lib-1.26.0/python-ecosys/cbor2/examples/cbor_test.py
--- old/micropython-lib-1.25.0/python-ecosys/cbor2/examples/cbor_test.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-ecosys/cbor2/examples/cbor_test.py
2025-07-31 16:59:51.000000000 +0200
@@ -23,7 +23,6 @@
THE SOFTWARE.
"""
-
import cbor2
input = [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/micropython-lib-1.25.0/python-stdlib/abc/abc.py
new/micropython-lib-1.26.0/python-stdlib/abc/abc.py
--- old/micropython-lib-1.25.0/python-stdlib/abc/abc.py 2025-04-14
02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-stdlib/abc/abc.py 2025-07-31
16:59:51.000000000 +0200
@@ -1,2 +1,6 @@
+class ABC:
+ pass
+
+
def abstractmethod(f):
return f
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/micropython-lib-1.25.0/python-stdlib/abc/manifest.py
new/micropython-lib-1.26.0/python-stdlib/abc/manifest.py
--- old/micropython-lib-1.25.0/python-stdlib/abc/manifest.py 2025-04-14
02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-stdlib/abc/manifest.py 2025-07-31
16:59:51.000000000 +0200
@@ -1,3 +1,3 @@
-metadata(version="0.0.1")
+metadata(version="0.1.0")
module("abc.py")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/micropython-lib-1.25.0/python-stdlib/errno/errno.py
new/micropython-lib-1.26.0/python-stdlib/errno/errno.py
--- old/micropython-lib-1.25.0/python-stdlib/errno/errno.py 2025-04-14
02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-stdlib/errno/errno.py 2025-07-31
16:59:51.000000000 +0200
@@ -34,5 +34,6 @@
ERANGE = 34 # Math result not representable
EAFNOSUPPORT = 97 # Address family not supported by protocol
ECONNRESET = 104 # Connection timed out
+ENOTCONN = 107 # Not connected
ETIMEDOUT = 110 # Connection timed out
EINPROGRESS = 115 # Operation now in progress
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/python-stdlib/errno/manifest.py
new/micropython-lib-1.26.0/python-stdlib/errno/manifest.py
--- old/micropython-lib-1.25.0/python-stdlib/errno/manifest.py 2025-04-14
02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-stdlib/errno/manifest.py 2025-07-31
16:59:51.000000000 +0200
@@ -1,3 +1,3 @@
-metadata(version="0.1.4")
+metadata(version="0.2.0")
module("errno.py")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/python-stdlib/logging/logging.py
new/micropython-lib-1.26.0/python-stdlib/logging/logging.py
--- old/micropython-lib-1.25.0/python-stdlib/logging/logging.py 2025-04-14
02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-stdlib/logging/logging.py 2025-07-31
16:59:51.000000000 +0200
@@ -202,8 +202,8 @@
getLogger().critical(msg, *args)
-def exception(msg, *args):
- getLogger().exception(msg, *args)
+def exception(msg, *args, exc_info=True):
+ getLogger().exception(msg, *args, exc_info=exc_info)
def shutdown():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/micropython-lib-1.25.0/python-stdlib/logging/manifest.py
new/micropython-lib-1.26.0/python-stdlib/logging/manifest.py
--- old/micropython-lib-1.25.0/python-stdlib/logging/manifest.py
2025-04-14 02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/python-stdlib/logging/manifest.py
2025-07-31 16:59:51.000000000 +0200
@@ -1,3 +1,3 @@
-metadata(version="0.6.1")
+metadata(version="0.6.2")
module("logging.py")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/micropython-lib-1.25.0/tools/verifygitlog.py
new/micropython-lib-1.26.0/tools/verifygitlog.py
--- old/micropython-lib-1.25.0/tools/verifygitlog.py 2025-04-14
02:26:38.000000000 +0200
+++ new/micropython-lib-1.26.0/tools/verifygitlog.py 2025-07-31
16:59:51.000000000 +0200
@@ -49,7 +49,7 @@
def diagnose_subject_line(subject_line, subject_line_format, err):
- err.error("Subject line: " + subject_line)
+ err.error('Subject line: "' + subject_line + '"')
if not subject_line.endswith("."):
err.error('* must end with "."')
if not re.match(r"^[^!]+: ", subject_line):
@@ -98,20 +98,47 @@
if len(subject_line) >= 73:
err.error("Subject line must be 72 or fewer characters: " +
subject_line)
+ # Do additional checks on the prefix of the subject line.
+ verify_subject_line_prefix(subject_line.split(": ")[0], err)
+
# Second one divides subject and body.
if len(raw_body) > 1 and raw_body[1]:
err.error("Second message line must be empty: " + raw_body[1])
# Message body lines.
for line in raw_body[2:]:
- # Long lines with URLs are exempt from the line length rule.
- if len(line) >= 76 and "://" not in line:
+ # Long lines with URLs or human names are exempt from the line length
rule.
+ if len(line) >= 76 and not (
+ "://" in line
+ or line.startswith("Co-authored-by: ")
+ or line.startswith("Signed-off-by: ")
+ ):
err.error("Message lines should be 75 or less characters: " + line)
if not raw_body[-1].startswith("Signed-off-by: ") or "@" not in
raw_body[-1]:
err.error('Message must be signed-off. Use "git commit -s".')
+def verify_subject_line_prefix(prefix, err):
+ ext = (".c", ".h", ".cpp", ".js", ".rst", ".md")
+
+ if prefix.startswith((".", "/")):
+ err.error('Subject prefix cannot begin with "." or "/".')
+
+ if prefix.endswith("/"):
+ err.error('Subject prefix cannot end with "/".')
+
+ if prefix.startswith("ports/"):
+ err.error(
+ 'Subject prefix cannot begin with "ports/", start with the name of
the port instead.'
+ )
+
+ if prefix.endswith(ext):
+ err.error(
+ "Subject prefix cannot end with a file extension, use the main
part of the filename without the extension."
+ )
+
+
def run(args):
verbose("run", *args)