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 <dheid...@suse.de>
+
+- 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)
 

Reply via email to