Skip to content

Commit

Permalink
unix-ffi: Move more unix-only packages to unix-ffi.
Browse files Browse the repository at this point in the history
With the dependencies captured in manifest.py, several packages in
python-stdlib were still unix-only due to direct or transitive dependencies
on unix-only or ffi modules.  Or they just make no sense to run on
microcontroller targets.

In a few cases (e.g. base64) where possible, the unix dependency could be
removed.

Updates manifest.py to use the `unix_ffi=True` arg to `require()` for these
libraries.

Rename re-pcre to re now that unix-ffi is effectively its own namespace.

Update unix-ffi/README.md, and strengthen the wording that the unix
libraries are unmaintained.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
  • Loading branch information
jimmo authored and dpgeorge committed Sep 5, 2022
1 parent ce66e70 commit f3cfc52
Show file tree
Hide file tree
Showing 74 changed files with 51 additions and 119 deletions.
2 changes: 1 addition & 1 deletion python-stdlib/base64/base64.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def b64decode(s, altchars=None, validate=False):
altchars = _bytes_from_decode_data(altchars)
assert len(altchars) == 2, repr(altchars)
s = s.translate(bytes.maketrans(altchars, b"+/"))
if validate and not re.match(b"^[A-Za-z0-9+/]*={0,2}$", s):
if validate and not re.match(b"^[A-Za-z0-9+/]*=*$", s):
raise binascii.Error("Non-base64 digit found")
return binascii.a2b_base64(s)

Expand Down
1 change: 0 additions & 1 deletion python-stdlib/base64/manifest.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
metadata(version="3.3.3-4")

require("binascii")
require("re-pcre")
require("struct")

module("base64.py")
7 changes: 0 additions & 7 deletions python-stdlib/email.charset/manifest.py

This file was deleted.

8 changes: 0 additions & 8 deletions python-stdlib/email.feedparser/manifest.py

This file was deleted.

9 changes: 0 additions & 9 deletions python-stdlib/email.header/manifest.py

This file was deleted.

15 changes: 0 additions & 15 deletions python-stdlib/email.internal/manifest.py

This file was deleted.

11 changes: 0 additions & 11 deletions python-stdlib/email.message/manifest.py

This file was deleted.

8 changes: 0 additions & 8 deletions python-stdlib/email.parser/manifest.py

This file was deleted.

7 changes: 0 additions & 7 deletions python-stdlib/glob/manifest.py

This file was deleted.

8 changes: 0 additions & 8 deletions python-stdlib/html.parser/manifest.py

This file was deleted.

10 changes: 0 additions & 10 deletions python-stdlib/http.client/manifest.py

This file was deleted.

2 changes: 1 addition & 1 deletion python-stdlib/uu/manifest.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
metadata(version="0.5.1")

require("binascii")
require("os")
require("os.path")

module("uu.py")
19 changes: 16 additions & 3 deletions unix-ffi/README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,30 @@
Unix-specific libraries
=======================

These are libraries that will only run on the Unix port of MicroPython. There is some limited support for the Windows port too.
These are libraries that will only run on the Unix port of MicroPython, or are
too big to be used on microcontrollers. There is some limited support for the
Windows port too.

**Note:** This directory is largely unmaintained, although large breaking changes are not expected.
**Note:** This directory is unmaintained.

Background
----------

The libraries in this directory provide additional CPython compatibility using
the host operating system's native libraries.

This is implemented either by accessing the libraries directly via libffi, or by using built-in modules that are only available on the Unix port.
This is implemented either by accessing the libraries directly via libffi, or
by using built-in modules that are only available on the Unix port.

In theory, this allows you to use MicroPython as a more complete drop-in
replacement for CPython.

Usage
-----

To use a unix-specific library, pass `unix_ffi=True` to `require()` in your
manifest file.

```py
require("os", unix_ffi=True) # Use the unix-ffi version instead of python-stdlib.
```
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
metadata(version="3.3.3-1")

require("re-pcre")
require("re", unix_ffi=True)

module("_markupbase.py")
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
require("base64")
require("binascii")
require("quopri")
require("re-pcre")
require("re", unix_ffi=True)
require("string")

package("email")
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,10 @@ def make_msgid(idstring=None, domain=None):
"""
timeval = time.time()
utcdate = time.strftime("%Y%m%d%H%M%S", time.gmtime(timeval))
pid = os.getpid()
if hasattr(os, "getpid"):
pid = os.getpid()
else:
pid = 0
randint = random.randrange(100000)
if idstring is None:
idstring = ""
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
metadata(version="3.3.3-2")

require("os")
require("re-pcre")
require("os", unix_ffi=True)
require("re", unix_ffi=True)
require("base64")
require("random")
require("datetime")
require("urllib.parse")
require("urllib.parse", unix_ffi=True)
require("warnings")
require("quopri")
require("email.charset")
require("email.charset", unix_ffi=True)

package("email")
2 changes: 1 addition & 1 deletion unix-ffi/fcntl/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

# Originally written by Paul Sokolovsky.

require("ffilib")
require("ffilib", unix_ffi=True)

module("fcntl.py")
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
metadata(version="3.3.3-1")

require("os")
require("os", unix_ffi=True)

module("getopt.py")
2 changes: 1 addition & 1 deletion unix-ffi/gettext/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

# Originally written by Riccardo Magliocchetti.

require("ffilib")
require("ffilib", unix_ffi=True)

module("gettext.py")
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
6 changes: 3 additions & 3 deletions unix-ffi/machine/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

# Originally written by Paul Sokolovsky.

require("ffilib")
require("os")
require("signal")
require("ffilib", unix_ffi=True)
require("os", unix_ffi=True)
require("signal", unix_ffi=True)

package("machine")
4 changes: 2 additions & 2 deletions unix-ffi/multiprocessing/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

# Originally written by Paul Sokolovsky.

require("os")
require("select")
require("os", unix_ffi=True)
require("select", unix_ffi=True)
require("pickle")

module("multiprocessing.py")
2 changes: 1 addition & 1 deletion unix-ffi/os/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# Originally written by Paul Sokolovsky.

require("ffilib")
require("ffilib", unix_ffi=True)
require("errno")
require("stat")

Expand Down
2 changes: 1 addition & 1 deletion unix-ffi/pwd/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

# Originally written by Riccardo Magliocchetti.

require("ffilib")
require("ffilib", unix_ffi=True)

module("pwd.py")
2 changes: 1 addition & 1 deletion unix-ffi/re-pcre/manifest.py → unix-ffi/re/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

# Originally written by Paul Sokolovsky.

require("ffilib")
require("ffilib", unix_ffi=True)

module("re.py")
File renamed without changes.
File renamed without changes.
4 changes: 2 additions & 2 deletions unix-ffi/select/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# Originally written by Paul Sokolovsky.

require("os")
require("ffilib")
require("os", unix_ffi=True)
require("ffilib", unix_ffi=True)

module("select.py")
2 changes: 1 addition & 1 deletion unix-ffi/signal/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

# Originally written by Paul Sokolovsky.

require("ffilib")
require("ffilib", unix_ffi=True)

module("signal.py")
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion unix-ffi/sqlite3/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

# Originally written by Paul Sokolovsky.

require("ffilib")
require("ffilib", unix_ffi=True)

module("sqlite3.py")
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion unix-ffi/time/manifest.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
metadata(version="0.5")

require("ffilib")
require("ffilib", unix_ffi=True)

module("time.py")
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
metadata(version="3.3.3-3")

require("getopt")
require("getopt", unix_ffi=True)
require("itertools")
# require("linecache") TODO
require("time")
require("time", unix_ffi=True)
require("traceback")

module("timeit.py")
File renamed without changes.
6 changes: 3 additions & 3 deletions unix-ffi/ucurses/manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

# Originally written by Paul Sokolovsky.

require("os")
require("tty")
require("select")
require("os", unix_ffi=True)
require("tty", unix_ffi=True)
require("select", unix_ffi=True)

package("ucurses")
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
metadata(version="0.9.0")

require("argparse")
require("argparse", unix_ffi=True)
require("fnmatch")

module("unittest.py")
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
metadata(version="0.5.2")

require("re-pcre")
require("re", unix_ffi=True)
require("collections")
require("collections.defaultdict")

Expand Down
File renamed without changes.
File renamed without changes.

0 comments on commit f3cfc52

Please sign in to comment.