summaryrefslogtreecommitdiff
path: root/modules/language/python/module
diff options
context:
space:
mode:
Diffstat (limited to 'modules/language/python/module')
-rw-r--r--modules/language/python/module/_python.scm6
-rw-r--r--modules/language/python/module/enum.py17
-rw-r--r--modules/language/python/module/os.scm12
-rw-r--r--modules/language/python/module/socket.py23
4 files changed, 36 insertions, 22 deletions
diff --git a/modules/language/python/module/_python.scm b/modules/language/python/module/_python.scm
index 531a6b5..6db3cf1 100644
--- a/modules/language/python/module/_python.scm
+++ b/modules/language/python/module/_python.scm
@@ -55,7 +55,11 @@
(define-syntax-rule (aif it p x y) (let ((it p)) (if it x y)))
-(define vars py-dict)
+(define (vars x)
+ (for ((k v : x)) ((l '()))
+ (cons (cons k v) l)
+ #:final
+ (dict l)))
(define (repr x) ((@ (guile) format) #f "~a" x))
(define abs py-abs)
diff --git a/modules/language/python/module/enum.py b/modules/language/python/module/enum.py
index 34e19b6..80b9499 100644
--- a/modules/language/python/module/enum.py
+++ b/modules/language/python/module/enum.py
@@ -17,7 +17,6 @@ __all__ = [
'auto', 'unique',
]
-
def _is_descriptor(obj):
"""Returns True if obj is a descriptor, False otherwise."""
return (
@@ -532,11 +531,13 @@ class Enum(metaclass=EnumMeta):
# all enum instances are actually created during class construction
# without calling this method; this method is called by the metaclass'
# __call__ (i.e. Color(3) ), and by pickle
+
if type(value) is cls:
# For lookups like Color(Color.RED)
return value
# by-value search for a matching enum member
# see if it's in the reverse mapping (for hashable values)
+
try:
if value in cls._value2member_map_:
return cls._value2member_map_[value]
@@ -545,6 +546,7 @@ class Enum(metaclass=EnumMeta):
for member in cls._member_map_.values():
if member._value_ == value:
return member
+
# still not found -- try _missing_ hook
return cls._missing_(value)
@@ -626,6 +628,7 @@ class Enum(metaclass=EnumMeta):
# also, replace the __reduce_ex__ method so unpickling works in
# previous Python versions
module_globals = vars(sys.modules[module])
+
if source:
source = vars(source)
else:
@@ -636,19 +639,24 @@ class Enum(metaclass=EnumMeta):
# are multiple names for the same number rather than varying
# between runs due to hash randomization of the module dictionary.
members = [
- (name, source[name])
- for name in source.keys()
- if filter(name)]
+ (name, source[name])
+ for name in source.keys()
+ if filter(name)]
try:
# sort by value
members.sort(key=lambda t: (t[1], t[0]))
except TypeError:
# unless some values aren't comparable, in which case sort by name
members.sort(key=lambda t: t[0])
+
cls = cls(name, members, module=module)
+
cls.__reduce_ex__ = _reduce_ex_by_name
+
module_globals.update(cls.__members__)
+
module_globals[name] = cls
+
return cls
@@ -887,3 +895,4 @@ def _power_of_two(value):
if value < 1:
return False
return value == 2 ** _high_bit(value)
+
diff --git a/modules/language/python/module/os.scm b/modules/language/python/module/os.scm
index d593b58..dab8dda 100644
--- a/modules/language/python/module/os.scm
+++ b/modules/language/python/module/os.scm
@@ -2355,8 +2355,10 @@
(define path "posixpath")
(define (_get_exports_list mod)
- (let ((p (rawref mod '_private)))
- (rawset mod '_private #f)
- (let ((l (dir mod)))
- (rawset mod '_private p)
- l)))
+ (let ((p (rawref mod '_export))
+ (l '()))
+ (module-for-each
+ (lambda (k v)
+ (set! l (cons (symbol->string k) l)))
+ p)
+ (py-list l)))
diff --git a/modules/language/python/module/socket.py b/modules/language/python/module/socket.py
index 31b814a..cb70bc8 100644
--- a/modules/language/python/module/socket.py
+++ b/modules/language/python/module/socket.py
@@ -47,33 +47,32 @@ Integer constants:
Many other constants may be defined; these may be used in calls to
the setsockopt() and getsockopt() methods.
"""
-pk(0,1)
+
import _socket
from _socket import *
-pk(0,2)
import os, sys, io, selectors
from enum import IntEnum, IntFlag
-pk(0,3)
+
try:
import errno
except ImportError:
errno = None
-pk(0,4)
+
EBADF = getattr(errno, 'EBADF', 9)
EAGAIN = getattr(errno, 'EAGAIN', 11)
EWOULDBLOCK = getattr(errno, 'EWOULDBLOCK', 11)
-pk(0,5)
+
__all__ = ["fromfd", "getfqdn", "create_connection",
"AddressFamily", "SocketKind"]
__all__.extend(os._get_exports_list(_socket))
-pk(0,6)
+
# Set up the socket.AF_* socket.SOCK_* constants as members of IntEnums for
# nicer string representations.
# Note that _socket only knows about the integer values. The public interface
# in this module understands the enums and translates them back from integers
# where needed (e.g. .family property of a socket object).
name__ = '_socket'
-pk(1)
+
IntEnum._convert(
'AddressFamily',
name__,
@@ -92,7 +91,7 @@ IntFlag._convert(
'AddressInfo',
name__,
lambda C: C.isupper() and C.startswith('AI_'))
-pk(2)
+
_LOCALHOST = '127.0.0.1'
_LOCALHOST_V6 = '::1'
@@ -462,7 +461,7 @@ def fromfd(fd, family, type, proto=0):
"""
nfd = dup(fd)
return socket(family, type, proto, nfd)
-pk(3)
+
if hasattr(_socket.socket, "share"):
def fromshare(info):
""" fromshare(info) -> socket object
@@ -472,7 +471,7 @@ if hasattr(_socket.socket, "share"):
"""
return socket(0, 0, 0, info)
__all__.append("fromshare")
-pk(4)
+
if hasattr(_socket, "socketpair"):
def socketpair(family=None, type=SOCK_STREAM, proto=0):
@@ -533,7 +532,7 @@ else:
lsock.close()
return (ssock, csock)
__all__.append("socketpair")
-pk(5)
+
socketpair.__doc__ = """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
Create a pair of socket objects from the sockets returned by the platform
socketpair() function.
@@ -751,4 +750,4 @@ def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
_intenum_converter(socktype, SocketKind),
proto, canonname, sa))
return addrlist
-pk(6)
+