Porównaj commity

...

19 Commity

Autor SHA1 Wiadomość Data
Brian Pugh 40bf1a6bca
Merge d5e5c4a707 into 45ead11f96 2024-04-18 20:29:09 -07:00
Damien George 45ead11f96 ssl: Use "from tls import *" to be compatible with axtls.
axtls doesn't define all the CERT_xxx constants, nor the MBEDTLS_VERSION
constant.

This change means that `tls.SSLContext` is imported into the module, but
that's subsequently overridden by the class definition in this module.

Signed-off-by: Damien George <damien@micropython.org>
2024-03-28 17:44:37 +11:00
iabdalkader 661efa48f0 senml: Use the updated cbor2 API.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-19 17:29:22 +11:00
iabdalkader 8ee876dcd6 cbor2: Deprecate decoder and encoder modules.
Deprecate decoder and encoder modules to maintain compatibility with the
CPython cbor2 module.

Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
2024-03-19 17:28:35 +11:00
Jim Mussared 5c7e3fc0bc json: Move to unix-ffi.
It requires the unix pcre-based re module.

This work was funded through GitHub Sponsors.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
2024-03-19 17:23:07 +11:00
Damien George 23df50d0ea unix-ffi: Remove "unix_ffi" argument from require().
And describe how to use `add_library()` instead.

Signed-off-by: Damien George <damien@micropython.org>
2024-03-17 13:22:36 +11:00
Damien George ffb07dbce5 gzip: Fix recursion error in open() function.
And give the `mode` parameter a default, matching CPython.

Signed-off-by: Damien George <damien@micropython.org>
2024-02-29 14:54:24 +11:00
Angus Gratton 224246531e lora-sx126x: Clean up some struct formatting.
Changes are cosmetic - and maybe very minor code size - but not functional.
_reg_read() was calling struct.packinto() with an incorrect number of
arguments but it seems like MicroPython didn't mind, as result is correct
for both versions.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-20 16:58:38 +11:00
Angus Gratton 35bb7952ba lora-sx126x: Fix syncword setting.
Fixes issue #796.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-20 16:58:08 +11:00
Angus Gratton 546284817a lora-sx127x: Implement missing syncword support.
This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-20 16:58:06 +11:00
Angus Gratton ad6ab5a78c lora-sync: Fix race with fast or failed send().
If send completes before the first call to poll_send(), the driver could
get stuck in _sync_wait(). This had much less impact before rp2 port went
tickless, as _sync_wait(will_irq=True) calls machine.idle() which may not
wake very frequently on a tickless port.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-20 16:57:50 +11:00
Angus Gratton b712103519 lora-sx126x: Fix invalid default configuration after reset.
According to the docs, only freq_khz was needed for working output.
However:

- Without output_power setting, no output from SX1262 antenna (theory:
  output routed to the SX1261 antenna).

- SF,BW,etc. settings were different from the SX127x power on defaults, so
  modems with an identical configuration were unable to communicate.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-20 16:44:57 +11:00
Angus Gratton 4cc67065dd tools/ci.sh: Add unix-ffi library when testing unix-ffi subdirectory.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
2024-02-19 23:21:04 +11:00
ubi de feo 8058b2935b tarfile-write: Fix permissions when adding to archive.
Signed-off-by: ubi de feo <me@ubidefeo.com>
2024-02-09 10:43:05 +11:00
Carlosgg 56f514f569 aiohttp: Fix binary data treatment.
- Fix binary data `Content-type` header and data `Content-Length`
  calculation.

- Fix query length when data is included.

- Fix `json` and `text` methods of `ClientResponse` to read
  `Content-Length` size

Signed-off-by: Carlos Gil <carlosgilglez@gmail.com>
2024-02-08 19:02:26 +11:00
Adam Knowles ddb1a27957 hmac: Fix passing in a string for digestmod argument.
The built-in `hashlib` module does not have a `.new` method (although the
Python version in this repository does).
2024-02-07 12:45:03 +11:00
Felix Dörre 35d41dbb0e ssl: Restructure micropython SSL interface to a new tls module.
MicroPython now supplies SSL/TLS functionality in a new built-in `tls`
module.  The `ssl` module is now implemented purely in Python, in this
repository.  Other libraries are updated to work with this scheme.

Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-07 12:12:13 +11:00
Felix Dörre 803452a1ac umqtt.simple: Simplify check for user being unused.
There don't seem to be any MQTT implementations that expect an empty
username (instead of the field missing), so the check for unused `user` can
be simplified.

Signed-off-by: Felix Dörre <felix@dogcraft.de>
2024-02-07 12:12:09 +11:00
Brian Pugh d5e5c4a707 python-stdlib/pathlib: Add __rtruediv__ magic method to pathlib.Path 2023-05-19 09:10:09 -07:00
72 zmienionych plików z 236 dodań i 166 usunięć

Wyświetl plik

@ -1,10 +1,11 @@
metadata(
version="0.1.0",
version="0.2.0",
description="Common networking packages for all network-capable deployments of MicroPython.",
)
require("mip")
require("ntptime")
require("ssl")
require("requests")
require("webrepl")

Wyświetl plik

@ -163,6 +163,9 @@ class _SX126x(BaseModem):
# 0x02 is 40us, default value appears undocumented but this is the SX1276 default
self._ramp_val = 0x02
# Configure the SX126x at least once after reset
self._configured = False
if reset:
# If the caller supplies a reset pin argument, reset the radio
reset.init(Pin.OUT, value=0)
@ -383,24 +386,24 @@ class _SX126x(BaseModem):
# see
# https://www.thethingsnetwork.org/forum/t/should-private-lorawan-networks-use-a-different-sync-word/34496/15
syncword = 0x0404 + ((syncword & 0x0F) << 4) + ((syncword & 0xF0) << 8)
self._cmd(">BBH", _CMD_WRITE_REGISTER, _REG_LSYNCRH, syncword)
self._cmd(">BHH", _CMD_WRITE_REGISTER, _REG_LSYNCRH, syncword)
if "output_power" in lora_cfg:
if not self._configured or any(
key in lora_cfg for key in ("output_power", "pa_ramp_us", "tx_ant")
):
pa_config_args, self._output_power = self._get_pa_tx_params(
lora_cfg["output_power"], lora_cfg.get("tx_ant", None)
lora_cfg.get("output_power", self._output_power), lora_cfg.get("tx_ant", None)
)
self._cmd("BBBBB", _CMD_SET_PA_CONFIG, *pa_config_args)
if "pa_ramp_us" in lora_cfg:
self._ramp_val = self._get_pa_ramp_val(
lora_cfg, [10, 20, 40, 80, 200, 800, 1700, 3400]
)
if "pa_ramp_us" in lora_cfg:
self._ramp_val = self._get_pa_ramp_val(
lora_cfg, [10, 20, 40, 80, 200, 800, 1700, 3400]
)
if "output_power" in lora_cfg or "pa_ramp_us" in lora_cfg:
# Only send the SetTxParams command if power level or PA ramp time have changed
self._cmd("BBB", _CMD_SET_TX_PARAMS, self._output_power, self._ramp_val)
if any(key in lora_cfg for key in ("sf", "bw", "coding_rate")):
if not self._configured or any(key in lora_cfg for key in ("sf", "bw", "coding_rate")):
if "sf" in lora_cfg:
self._sf = lora_cfg["sf"]
if self._sf < _CFG_SF_MIN or self._sf > _CFG_SF_MAX:
@ -441,6 +444,7 @@ class _SX126x(BaseModem):
self._reg_write(_REG_RX_GAIN, 0x96 if lora_cfg["rx_boost"] else 0x94)
self._check_error()
self._configured = True
def _invert_workaround(self, enable):
# Apply workaround for DS 15.4 Optimizing the Inverted IQ Operation
@ -465,7 +469,7 @@ class _SX126x(BaseModem):
# See DS 13.1.12 Calibrate Function
# calibParam 0xFE means to calibrate all blocks.
self._cmd("<BB", _CMD_CALIBRATE, 0xFE)
self._cmd("BB", _CMD_CALIBRATE, 0xFE)
time.sleep_us(_CALIBRATE_TYPICAL_TIME_US)
@ -541,7 +545,7 @@ class _SX126x(BaseModem):
else:
timeout = 0 # Single receive mode, no timeout
self._cmd(">BBH", _CMD_SET_RX, timeout >> 16, timeout)
self._cmd(">BBH", _CMD_SET_RX, timeout >> 16, timeout) # 24 bits
return self._dio1
@ -725,10 +729,10 @@ class _SX126x(BaseModem):
return res
def _reg_read(self, addr):
return self._cmd("BBBB", _CMD_READ_REGISTER, addr >> 8, addr & 0xFF, n_read=1)[0]
return self._cmd(">BHB", _CMD_READ_REGISTER, addr, 0, n_read=1)[0]
def _reg_write(self, addr, val):
return self._cmd("BBBB", _CMD_WRITE_REGISTER, addr >> 8, addr & 0xFF, val & 0xFF)
return self._cmd(">BHB", _CMD_WRITE_REGISTER, addr, val & 0xFF)
class _SX1262(_SX126x):

Wyświetl plik

@ -1,3 +1,3 @@
metadata(version="0.1.1")
metadata(version="0.1.2")
require("lora")
package("lora")

Wyświetl plik

@ -519,6 +519,9 @@ class _SX127x(BaseModem):
self._reg_update(_REG_MODEM_CONFIG3, update_mask, modem_config3)
if "syncword" in lora_cfg:
self._reg_write(_REG_SYNC_WORD, lora_cfg["syncword"])
def _reg_write(self, reg, value):
self._cs(0)
if isinstance(value, int):

Wyświetl plik

@ -1,3 +1,3 @@
metadata(version="0.1.0")
metadata(version="0.1.1")
require("lora")
package("lora")

Wyświetl plik

@ -42,8 +42,8 @@ class SyncModem:
tx = True
while tx is True:
tx = self.poll_send()
self._sync_wait(will_irq)
tx = self.poll_send()
return tx
def recv(self, timeout_ms=None, rx_length=0xFF, rx_packet=None):

Wyświetl plik

@ -1,3 +1,3 @@
metadata(version="0.1.0")
metadata(version="0.1.1")
require("lora")
package("lora")

Wyświetl plik

@ -37,10 +37,11 @@ class BaseModem:
self._ant_sw = ant_sw
self._irq_callback = None
# Common configuration settings that need to be tracked by all modem drivers
# (Note that subclasses may set these to other values in their constructors, to match
# the power-on-reset configuration of a particular modem.)
# Common configuration settings that need to be tracked by all modem drivers.
#
# Where modem hardware sets different values after reset, the driver should
# set them back to these defaults (if not provided by the user), so that
# behaviour remains consistent between different modems using the same driver.
self._rf_freq_hz = 0 # Needs to be set via configure()
self._sf = 7 # Spreading factor
self._bw_hz = 125000 # Reset value

Wyświetl plik

@ -26,7 +26,7 @@ THE SOFTWARE.
from senml import *
import time
from cbor2 import decoder
import cbor2
pack = SenmlPack("device_name")
@ -38,5 +38,5 @@ while True:
cbor_val = pack.to_cbor()
print(cbor_val)
print(cbor_val.hex())
print(decoder.loads(cbor_val)) # convert to string again so we can print it.
print(cbor2.loads(cbor_val)) # convert to string again so we can print it.
time.sleep(1)

Wyświetl plik

@ -1,6 +1,6 @@
metadata(
description="SenML serialisation for MicroPython.",
version="0.1.0",
version="0.1.1",
pypi_publish="micropython-senml",
)

Wyświetl plik

@ -27,8 +27,7 @@ THE SOFTWARE.
from senml.senml_record import SenmlRecord
from senml.senml_base import SenmlBase
import json
from cbor2 import encoder
from cbor2 import decoder
import cbor2
class SenmlPackIterator:
@ -278,7 +277,7 @@ class SenmlPack(SenmlBase):
:param data: a byte array.
:return: None
"""
records = decoder.loads(data) # load the raw senml data
records = cbor2.loads(data) # load the raw senml data
naming_map = {
"bn": -2,
"bt": -3,
@ -320,7 +319,7 @@ class SenmlPack(SenmlBase):
}
converted = []
self._build_rec_dict(naming_map, converted)
return encoder.dumps(converted)
return cbor2.dumps(converted)
def add(self, item):
"""

Wyświetl plik

@ -1,4 +1,4 @@
metadata(description="Lightweight MQTT client for MicroPython.", version="1.3.4")
metadata(description="Lightweight MQTT client for MicroPython.", version="1.4.0")
# Originally written by Paul Sokolovsky.

Wyświetl plik

@ -16,8 +16,7 @@ class MQTTClient:
user=None,
password=None,
keepalive=0,
ssl=False,
ssl_params={},
ssl=None,
):
if port == 0:
port = 8883 if ssl else 1883
@ -26,7 +25,6 @@ class MQTTClient:
self.server = server
self.port = port
self.ssl = ssl
self.ssl_params = ssl_params
self.pid = 0
self.cb = None
self.user = user
@ -67,15 +65,13 @@ class MQTTClient:
addr = socket.getaddrinfo(self.server, self.port)[0][-1]
self.sock.connect(addr)
if self.ssl:
import ussl
self.sock = ussl.wrap_socket(self.sock, **self.ssl_params)
self.sock = self.ssl.wrap_socket(self.sock, server_hostname=self.server)
premsg = bytearray(b"\x10\0\0\0\0\0")
msg = bytearray(b"\x04MQTT\x04\x02\0\0")
sz = 10 + 2 + len(self.client_id)
msg[6] = clean_session << 1
if self.user is not None:
if self.user:
sz += 2 + len(self.user) + 2 + len(self.pswd)
msg[6] |= 0xC0
if self.keepalive:
@ -101,7 +97,7 @@ class MQTTClient:
if self.lw_topic:
self._send_str(self.lw_topic)
self._send_str(self.lw_msg)
if self.user is not None:
if self.user:
self._send_str(self.user)
self._send_str(self.pswd)
resp = self.sock.read(4)

Wyświetl plik

@ -1,4 +1,4 @@
metadata(version="0.6.0")
metadata(version="0.7.0")
# Originally written by Paul Sokolovsky.

Wyświetl plik

@ -12,7 +12,7 @@ def urlopen(url, data=None, method="GET"):
if proto == "http:":
port = 80
elif proto == "https:":
import ussl
import tls
port = 443
else:
@ -29,7 +29,9 @@ def urlopen(url, data=None, method="GET"):
try:
s.connect(ai[-1])
if proto == "https:":
s = ussl.wrap_socket(s, server_hostname=host)
context = tls.SSLContext(tls.PROTOCOL_TLS_CLIENT)
context.verify_mode = tls.CERT_NONE
s = context.wrap_socket(s, server_hostname=host)
s.write(method)
s.write(b" /")

Wyświetl plik

@ -38,10 +38,10 @@ class ClientResponse:
return self._decode(await self.content.read(sz))
async def text(self, encoding="utf-8"):
return (await self.read(sz=-1)).decode(encoding)
return (await self.read(int(self.headers.get("Content-Length", -1)))).decode(encoding)
async def json(self):
return _json.loads(await self.read())
return _json.loads(await self.read(int(self.headers.get("Content-Length", -1))))
def __repr__(self):
return "<ClientResponse %d %s>" % (self.status, self.headers)
@ -121,7 +121,7 @@ class ClientSession:
if b"chunked" in line:
chunked = True
elif line.startswith(b"Location:"):
url = line.rstrip().split(None, 1)[1].decode("latin-1")
url = line.rstrip().split(None, 1)[1].decode()
if 301 <= status <= 303:
redir_cnt += 1
@ -195,17 +195,22 @@ class ClientSession:
if "Host" not in headers:
headers.update(Host=host)
if not data:
query = "%s /%s %s\r\n%s\r\n" % (
query = b"%s /%s %s\r\n%s\r\n" % (
method,
path,
version,
"\r\n".join(f"{k}: {v}" for k, v in headers.items()) + "\r\n" if headers else "",
)
else:
headers.update(**{"Content-Length": len(str(data))})
if json:
headers.update(**{"Content-Type": "application/json"})
query = """%s /%s %s\r\n%s\r\n%s\r\n\r\n""" % (
if isinstance(data, bytes):
headers.update(**{"Content-Type": "application/octet-stream"})
else:
data = data.encode()
headers.update(**{"Content-Length": len(data)})
query = b"""%s /%s %s\r\n%s\r\n%s""" % (
method,
path,
version,
@ -213,10 +218,10 @@ class ClientSession:
data,
)
if not is_handshake:
await writer.awrite(query.encode("latin-1"))
await writer.awrite(query)
return reader
else:
await writer.awrite(query.encode())
await writer.awrite(query)
return reader, writer
def request(self, method, url, data=None, json=None, ssl=None, params=None, headers={}):

Wyświetl plik

@ -1,6 +1,6 @@
metadata(
description="HTTP client module for MicroPython asyncio module",
version="0.0.1",
version="0.0.2",
pypi="aiohttp",
)

Wyświetl plik

@ -24,5 +24,10 @@ THE SOFTWARE.
"""
from . import decoder
from . import encoder
from ._decoder import CBORDecoder
from ._decoder import load
from ._decoder import loads
from ._encoder import CBOREncoder
from ._encoder import dump
from ._encoder import dumps

Wyświetl plik

@ -24,16 +24,15 @@ THE SOFTWARE.
"""
from cbor2 import encoder
from cbor2 import decoder
import cbor2
input = [
{"bn": "urn:dev:ow:10e2073a01080063", "u": "Cel", "t": 1.276020076e09, "v": 23.5},
{"u": "Cel", "t": 1.276020091e09, "v": 23.6},
]
data = encoder.dumps(input)
data = cbor2.dumps(input)
print(data)
print(data.hex())
text = decoder.loads(data)
text = cbor2.loads(data)
print(text)

Wyświetl plik

@ -1,3 +1,3 @@
metadata(version="0.1.0", pypi="cbor2")
metadata(version="1.0.0", pypi="cbor2")
package("cbor2")

Wyświetl plik

@ -1,3 +1,3 @@
metadata(version="0.8.1", pypi="requests")
metadata(version="0.9.0", pypi="requests")
package("requests")

Wyświetl plik

@ -63,7 +63,7 @@ def request(
if proto == "http:":
port = 80
elif proto == "https:":
import ussl
import tls
port = 443
else:
@ -90,7 +90,9 @@ def request(
try:
s.connect(ai[-1])
if proto == "https:":
s = ussl.wrap_socket(s, server_hostname=host)
context = tls.SSLContext(tls.PROTOCOL_TLS_CLIENT)
context.verify_mode = tls.CERT_NONE
s = context.wrap_socket(s, server_hostname=host)
s.write(b"%s /%s HTTP/1.0\r\n" % (method, path))
if "Host" not in headers:
s.write(b"Host: %s\r\n" % host)

Wyświetl plik

@ -3,15 +3,15 @@
_WBITS = const(15)
import io, deflate
import builtins, io, deflate
def GzipFile(fileobj):
return deflate.DeflateIO(fileobj, deflate.GZIP, _WBITS)
def open(filename, mode):
return deflate.DeflateIO(open(filename, mode), deflate.GZIP, _WBITS, True)
def open(filename, mode="rb"):
return deflate.DeflateIO(builtins.open(filename, mode), deflate.GZIP, _WBITS, True)
if hasattr(deflate.DeflateIO, "write"):

Wyświetl plik

@ -1,3 +1,3 @@
metadata(version="1.0.0")
metadata(version="1.0.1")
module("gzip.py")

Wyświetl plik

@ -17,7 +17,7 @@ class HMAC:
make_hash = digestmod # A
elif isinstance(digestmod, str):
# A hash name suitable for hashlib.new().
make_hash = lambda d=b"": hashlib.new(digestmod, d) # B
make_hash = lambda d=b"": getattr(hashlib, digestmod)(d)
else:
# A module supporting PEP 247.
make_hash = digestmod.new # C

Wyświetl plik

@ -1,3 +1,3 @@
metadata(version="3.4.3")
metadata(version="3.4.4")
module("hmac.py")

Wyświetl plik

@ -8,7 +8,7 @@ import hashlib
msg = b"zlutoucky kun upel dabelske ody"
dig = hmac.new(b"1234567890", msg=msg, digestmod=hashlib.sha256).hexdigest()
dig = hmac.new(b"1234567890", msg=msg, digestmod="sha256").hexdigest()
print("c735e751e36b08fb01e25794bdb15e7289b82aecdb652c8f4f72f307b39dad39")
print(dig)

Wyświetl plik

@ -1,3 +0,0 @@
metadata(version="0.1.0")
package("json")

Wyświetl plik

@ -47,6 +47,9 @@ class Path:
def __truediv__(self, other):
return Path(self._path, str(other))
def __rtruediv__(self, other):
return Path(other, self._path)
def __repr__(self):
return f'{type(self).__name__}("{self._path}")'

Wyświetl plik

@ -322,3 +322,14 @@ class TestPathlib(unittest.TestCase):
self.assertTrue(Path("foo/test").with_suffix(".tar") == Path("foo/test.tar"))
self.assertTrue(Path("foo/bar.bin").with_suffix(".txt") == Path("foo/bar.txt"))
self.assertTrue(Path("bar.txt").with_suffix("") == Path("bar"))
def test_rtruediv(self):
"""Works as of micropython ea7031f"""
res = "foo" / Path("bar")
self.assertTrue(res == Path("foo/bar"))
def test_rtruediv_inplace(self):
"""Works as of micropython ea7031f"""
res = "foo"
res /= Path("bar")
self.assertTrue(res == Path("foo/bar"))

Wyświetl plik

@ -1,3 +1,3 @@
metadata(version="0.1.0")
metadata(version="0.2.1")
module("ssl.py")
module("ssl.py", opt=3)

Wyświetl plik

@ -1,36 +1,65 @@
from ussl import *
import ussl as _ussl
import tls
from tls import *
# Constants
for sym in "CERT_NONE", "CERT_OPTIONAL", "CERT_REQUIRED":
if sym not in globals():
globals()[sym] = object()
class SSLContext:
def __init__(self, *args):
self._context = tls.SSLContext(*args)
self._context.verify_mode = CERT_NONE
@property
def verify_mode(self):
return self._context.verify_mode
@verify_mode.setter
def verify_mode(self, val):
self._context.verify_mode = val
def load_cert_chain(self, certfile, keyfile):
if isinstance(certfile, str):
with open(certfile, "rb") as f:
certfile = f.read()
if isinstance(keyfile, str):
with open(keyfile, "rb") as f:
keyfile = f.read()
self._context.load_cert_chain(certfile, keyfile)
def load_verify_locations(self, cafile=None, cadata=None):
if cafile:
with open(cafile, "rb") as f:
cadata = f.read()
self._context.load_verify_locations(cadata)
def wrap_socket(
self, sock, server_side=False, do_handshake_on_connect=True, server_hostname=None
):
return self._context.wrap_socket(
sock,
server_side=server_side,
do_handshake_on_connect=do_handshake_on_connect,
server_hostname=server_hostname,
)
def wrap_socket(
sock,
keyfile=None,
certfile=None,
server_side=False,
key=None,
cert=None,
cert_reqs=CERT_NONE,
*,
ca_certs=None,
server_hostname=None
cadata=None,
server_hostname=None,
do_handshake=True,
):
# TODO: More arguments accepted by CPython could also be handled here.
# That would allow us to accept ca_certs as a positional argument, which
# we should.
kw = {}
if keyfile is not None:
kw["keyfile"] = keyfile
if certfile is not None:
kw["certfile"] = certfile
if server_side is not False:
kw["server_side"] = server_side
if cert_reqs is not CERT_NONE:
kw["cert_reqs"] = cert_reqs
if ca_certs is not None:
kw["ca_certs"] = ca_certs
if server_hostname is not None:
kw["server_hostname"] = server_hostname
return _ussl.wrap_socket(sock, **kw)
con = SSLContext(PROTOCOL_TLS_SERVER if server_side else PROTOCOL_TLS_CLIENT)
if cert or key:
con.load_cert_chain(cert, key)
if cadata:
con.load_verify_locations(cadata=cadata)
con.verify_mode = cert_reqs
return con.wrap_socket(
sock,
server_side=server_side,
do_handshake_on_connect=do_handshake,
server_hostname=server_hostname,
)

Wyświetl plik

@ -1,4 +1,4 @@
metadata(description="Adds write (create/append) support to tarfile.", version="0.1.1")
metadata(description="Adds write (create/append) support to tarfile.", version="0.1.2")
require("tarfile")
package("tarfile")

Wyświetl plik

@ -67,7 +67,7 @@ def addfile(self, tarinfo, fileobj=None):
name += "/"
hdr = uctypes.struct(uctypes.addressof(buf), _TAR_HEADER, uctypes.LITTLE_ENDIAN)
hdr.name[:] = name.encode("utf-8")[:100]
hdr.mode[:] = b"%07o\0" % (tarinfo.mode & 0o7777)
hdr.mode[:] = b"%07o\0" % ((0o755 if tarinfo.isdir() else 0o644) & 0o7777)
hdr.uid[:] = b"%07o\0" % tarinfo.uid
hdr.gid[:] = b"%07o\0" % tarinfo.gid
hdr.size[:] = b"%011o\0" % size
@ -96,9 +96,10 @@ def addfile(self, tarinfo, fileobj=None):
def add(self, name, recursive=True):
from . import TarInfo
tarinfo = TarInfo(name)
try:
stat = os.stat(name)
res_name = (name + '/') if (stat[0] & 0xf000) == 0x4000 else name
tarinfo = TarInfo(res_name)
tarinfo.mode = stat[0]
tarinfo.uid = stat[4]
tarinfo.gid = stat[5]

Wyświetl plik

@ -30,7 +30,11 @@ function ci_build_packages_check_manifest {
for file in $(find -name manifest.py); do
echo "##################################################"
echo "# Testing $file"
python3 /tmp/micropython/tools/manifestfile.py --lib . --compile $file
extra_args=
if [[ "$file" =~ "/unix-ffi/" ]]; then
extra_args="--unix-ffi"
fi
python3 /tmp/micropython/tools/manifestfile.py $extra_args --lib . --compile $file
done
}

Wyświetl plik

@ -19,9 +19,13 @@ replacement for CPython.
### Usage
To use a unix-specific library, pass `unix_ffi=True` to `require()` in your
manifest file.
To use a unix-specific library, a manifest file must add the `unix-ffi`
library to the library search path using `add_library()`:
```py
require("os", unix_ffi=True) # Use the unix-ffi version instead of python-stdlib.
add_library("unix-ffi", "$(MPY_LIB_DIR)/unix-ffi", prepend=True)
```
Prepending the `unix-ffi` library to the path will make it so that the
`unix-ffi` version of a package will be preferred if that package appears in
both `unix-ffi` and another library (eg `python-stdlib`).

Wyświetl plik

@ -1,5 +1,5 @@
metadata(version="3.3.4")
require("re", unix_ffi=True)
require("re")
module("_markupbase.py")

Wyświetl plik

@ -1,7 +1,7 @@
metadata(version="0.5.1")
require("functools")
require("email.encoders", unix_ffi=True)
require("email.errors", unix_ffi=True)
require("email.encoders")
require("email.errors")
package("email")

Wyświetl plik

@ -3,7 +3,7 @@ metadata(version="0.5.1")
require("base64")
require("binascii")
require("quopri")
require("re", unix_ffi=True)
require("re")
require("string")
package("email")

Wyświetl plik

@ -1,8 +1,8 @@
metadata(version="0.5.1")
require("re", unix_ffi=True)
require("email.errors", unix_ffi=True)
require("email.message", unix_ffi=True)
require("email.internal", unix_ffi=True)
require("re")
require("email.errors")
require("email.message")
require("email.internal")
package("email")

Wyświetl plik

@ -1,9 +1,9 @@
metadata(version="0.5.2")
require("re", unix_ffi=True)
require("re")
require("binascii")
require("email.encoders", unix_ffi=True)
require("email.errors", unix_ffi=True)
require("email.charset", unix_ffi=True)
require("email.encoders")
require("email.errors")
require("email.charset")
package("email")

Wyświetl plik

@ -1,15 +1,15 @@
metadata(version="0.5.1")
require("re", unix_ffi=True)
require("re")
require("base64")
require("binascii")
require("functools")
require("string")
# require("calendar") TODO
require("abc")
require("email.errors", unix_ffi=True)
require("email.header", unix_ffi=True)
require("email.charset", unix_ffi=True)
require("email.utils", unix_ffi=True)
require("email.errors")
require("email.header")
require("email.charset")
require("email.utils")
package("email")

Wyświetl plik

@ -1,11 +1,11 @@
metadata(version="0.5.3")
require("re", unix_ffi=True)
require("re")
require("uu")
require("base64")
require("binascii")
require("email.utils", unix_ffi=True)
require("email.errors", unix_ffi=True)
require("email.charset", unix_ffi=True)
require("email.utils")
require("email.errors")
require("email.charset")
package("email")

Wyświetl plik

@ -1,8 +1,8 @@
metadata(version="0.5.1")
require("warnings")
require("email.feedparser", unix_ffi=True)
require("email.message", unix_ffi=True)
require("email.internal", unix_ffi=True)
require("email.feedparser")
require("email.message")
require("email.internal")
package("email")

Wyświetl plik

@ -1,13 +1,13 @@
metadata(version="3.3.4")
require("os", unix_ffi=True)
require("re", unix_ffi=True)
require("os")
require("re")
require("base64")
require("random")
require("datetime")
require("urllib.parse", unix_ffi=True)
require("urllib.parse")
require("warnings")
require("quopri")
require("email.charset", unix_ffi=True)
require("email.charset")
package("email")

Wyświetl plik

@ -2,6 +2,6 @@ metadata(version="0.0.4")
# Originally written by Paul Sokolovsky.
require("ffilib", unix_ffi=True)
require("ffilib")
module("fcntl.py")

Wyświetl plik

@ -1,5 +1,5 @@
metadata(version="3.3.4")
require("os", unix_ffi=True)
require("os")
module("getopt.py")

Wyświetl plik

@ -2,6 +2,6 @@ metadata(version="0.1.0")
# Originally written by Riccardo Magliocchetti.
require("ffilib", unix_ffi=True)
require("ffilib")
module("gettext.py")

Wyświetl plik

@ -1,8 +1,8 @@
metadata(version="0.5.2")
require("os", unix_ffi=True)
require("os")
require("os-path")
require("re", unix_ffi=True)
require("re")
require("fnmatch")
module("glob.py")

Wyświetl plik

@ -1,8 +1,8 @@
metadata(version="3.3.4")
require("_markupbase", unix_ffi=True)
require("_markupbase")
require("warnings")
require("html.entities", unix_ffi=True)
require("re", unix_ffi=True)
require("html.entities")
require("re")
package("html")

Wyświetl plik

@ -1,10 +1,10 @@
metadata(version="0.5.1")
require("email.parser", unix_ffi=True)
require("email.message", unix_ffi=True)
require("socket", unix_ffi=True)
require("email.parser")
require("email.message")
require("socket")
require("collections")
require("urllib.parse", unix_ffi=True)
require("urllib.parse")
require("warnings")
package("http")

Wyświetl plik

@ -0,0 +1,4 @@
metadata(version="0.2.0")
require("re")
package("json")

Wyświetl plik

@ -2,8 +2,8 @@ metadata(version="0.2.1")
# Originally written by Paul Sokolovsky.
require("ffilib", unix_ffi=True)
require("os", unix_ffi=True)
require("signal", unix_ffi=True)
require("ffilib")
require("os")
require("signal")
package("machine")

Wyświetl plik

@ -2,8 +2,8 @@ metadata(version="0.1.2")
# Originally written by Paul Sokolovsky.
require("os", unix_ffi=True)
require("select", unix_ffi=True)
require("os")
require("select")
require("pickle")
module("multiprocessing.py")

Wyświetl plik

@ -2,7 +2,7 @@ metadata(version="0.6.0")
# Originally written by Paul Sokolovsky.
require("ffilib", unix_ffi=True)
require("ffilib")
require("errno")
require("stat")

Wyświetl plik

@ -2,6 +2,6 @@ metadata(version="0.1.0")
# Originally written by Riccardo Magliocchetti.
require("ffilib", unix_ffi=True)
require("ffilib")
module("pwd.py")

Wyświetl plik

@ -2,6 +2,6 @@ metadata(version="0.2.5")
# Originally written by Paul Sokolovsky.
require("ffilib", unix_ffi=True)
require("ffilib")
module("re.py")

Wyświetl plik

@ -2,7 +2,7 @@ metadata(version="0.3.0")
# Originally written by Paul Sokolovsky.
require("os", unix_ffi=True)
require("ffilib", unix_ffi=True)
require("os")
require("ffilib")
module("select.py")

Wyświetl plik

@ -2,6 +2,6 @@ metadata(version="0.3.2")
# Originally written by Paul Sokolovsky.
require("ffilib", unix_ffi=True)
require("ffilib")
module("signal.py")

Wyświetl plik

@ -2,6 +2,6 @@ metadata(version="0.2.4")
# Originally written by Paul Sokolovsky.
require("ffilib", unix_ffi=True)
require("ffilib")
module("sqlite3.py")

Wyświetl plik

@ -1,5 +1,5 @@
metadata(version="0.5.0")
require("ffilib", unix_ffi=True)
require("ffilib")
module("time.py")

Wyświetl plik

@ -1,9 +1,9 @@
metadata(version="3.3.4")
require("getopt", unix_ffi=True)
require("getopt")
require("itertools")
# require("linecache") TODO
require("time", unix_ffi=True)
require("time")
require("traceback")
module("timeit.py")

Wyświetl plik

@ -2,8 +2,8 @@ metadata(version="0.1.2")
# Originally written by Paul Sokolovsky.
require("os", unix_ffi=True)
require("tty", unix_ffi=True)
require("select", unix_ffi=True)
require("os")
require("tty")
require("select")
package("ucurses")

Wyświetl plik

@ -1,6 +1,6 @@
metadata(version="0.5.2")
require("re", unix_ffi=True)
require("re")
require("collections")
require("collections-defaultdict")