Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gevent
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
gevent
Commits
62129a3c
Commit
62129a3c
authored
Jul 12, 2018
by
Jason Madden
Committed by
GitHub
Jul 12, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1255 from gevent/appveyor-37
Enable 3.7 on appveyor.
parents
4805d78f
160dc50d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
95 additions
and
10 deletions
+95
-10
CHANGES.rst
CHANGES.rst
+3
-0
appveyor.yml
appveyor.yml
+4
-0
src/gevent/subprocess.py
src/gevent/subprocess.py
+72
-10
src/greentest/greentest/patched_tests_setup.py
src/greentest/greentest/patched_tests_setup.py
+16
-0
No files found.
CHANGES.rst
View file @
62129a3c
...
@@ -9,6 +9,9 @@
...
@@ -9,6 +9,9 @@
- Update the bundled libuv from 1.20.1 to 1.22.0.
- Update the bundled libuv from 1.20.1 to 1.22.0.
- Test Python 3.7 on Appveyor. Fix the handling of Popen's
``close_fds`` argument on 3.7.
- Update Python versions tested on Travis, including PyPy to 6.0. See :issue:`1195`.
- Update Python versions tested on Travis, including PyPy to 6.0. See :issue:`1195`.
- :mod:`gevent.queue` imports ``_PySimpleQueue`` instead of
- :mod:`gevent.queue` imports ``_PySimpleQueue`` instead of
...
...
appveyor.yml
View file @
62129a3c
...
@@ -10,6 +10,10 @@ environment:
...
@@ -10,6 +10,10 @@ environment:
# Pre-installed Python versions, which Appveyor may upgrade to
# Pre-installed Python versions, which Appveyor may upgrade to
# a later point release.
# a later point release.
-
PYTHON
:
"
C:
\\
Python37-x64"
PYTHON_VERSION
:
"
3.7.x"
PYTHON_ARCH
:
"
64"
PYTHON_EXE
:
python
-
PYTHON
:
"
C:
\\
Python27-x64"
-
PYTHON
:
"
C:
\\
Python27-x64"
PYTHON_VERSION
:
"
2.7.x"
# currently 2.7.13
PYTHON_VERSION
:
"
2.7.x"
# currently 2.7.13
...
...
src/gevent/subprocess.py
View file @
62129a3c
...
@@ -151,6 +151,17 @@ if sys.version_info[:2] >= (3, 6):
...
@@ -151,6 +151,17 @@ if sys.version_info[:2] >= (3, 6):
__extra__
.
remove
(
'STARTUPINFO'
)
__extra__
.
remove
(
'STARTUPINFO'
)
__imports__
.
append
(
'STARTUPINFO'
)
__imports__
.
append
(
'STARTUPINFO'
)
if
sys
.
version_info
[:
2
]
>=
(
3
,
7
):
__imports__
.
extend
([
'ABOVE_NORMAL_PRIORITY_CLASS'
,
'BELOW_NORMAL_PRIORITY_CLASS'
,
'HIGH_PRIORITY_CLASS'
,
'IDLE_PRIORITY_CLASS'
,
'NORMAL_PRIORITY_CLASS'
,
'REALTIME_PRIORITY_CLASS'
,
'CREATE_NO_WINDOW'
,
'DETACHED_PROCESS'
,
'CREATE_DEFAULT_ERROR_MODE'
,
'CREATE_BREAKAWAY_FROM_JOB'
])
actually_imported
=
copy_globals
(
__subprocess__
,
globals
(),
actually_imported
=
copy_globals
(
__subprocess__
,
globals
(),
only_names
=
__imports__
,
only_names
=
__imports__
,
ignore_missing_names
=
True
)
ignore_missing_names
=
True
)
...
@@ -462,16 +473,20 @@ class Popen(object):
...
@@ -462,16 +473,20 @@ class Popen(object):
if
preexec_fn
is
not
None
:
if
preexec_fn
is
not
None
:
raise
ValueError
(
"preexec_fn is not supported on Windows "
raise
ValueError
(
"preexec_fn is not supported on Windows "
"platforms"
)
"platforms"
)
any_stdio_set
=
(
stdin
is
not
None
or
stdout
is
not
None
or
if
sys
.
version_info
[:
2
]
>=
(
3
,
7
):
stderr
is
not
None
)
if
close_fds
is
_PLATFORM_DEFAULT_CLOSE_FDS
:
if
close_fds
is
_PLATFORM_DEFAULT_CLOSE_FDS
:
if
any_stdio_set
:
close_fds
=
False
else
:
close_fds
=
True
close_fds
=
True
elif
close_fds
and
any_stdio_set
:
else
:
raise
ValueError
(
"close_fds is not supported on Windows "
any_stdio_set
=
(
stdin
is
not
None
or
stdout
is
not
None
or
"platforms if you redirect stdin/stdout/stderr"
)
stderr
is
not
None
)
if
close_fds
is
_PLATFORM_DEFAULT_CLOSE_FDS
:
if
any_stdio_set
:
close_fds
=
False
else
:
close_fds
=
True
elif
close_fds
and
any_stdio_set
:
raise
ValueError
(
"close_fds is not supported on Windows "
"platforms if you redirect stdin/stdout/stderr"
)
if
threadpool
is
None
:
if
threadpool
is
None
:
threadpool
=
hub
.
threadpool
threadpool
=
hub
.
threadpool
self
.
threadpool
=
threadpool
self
.
threadpool
=
threadpool
...
@@ -900,6 +915,21 @@ class Popen(object):
...
@@ -900,6 +915,21 @@ class Popen(object):
"shell or platform."
)
"shell or platform."
)
return
w9xpopen
return
w9xpopen
def
_filter_handle_list
(
self
,
handle_list
):
"""Filter out console handles that can't be used
in lpAttributeList["handle_list"] and make sure the list
isn't empty. This also removes duplicate handles."""
# An handle with it's lowest two bits set might be a special console
# handle that if passed in lpAttributeList["handle_list"], will
# cause it to fail.
# Only works on 3.7+
return
list
({
handle
for
handle
in
handle_list
if
handle
&
0x3
!=
0x3
or
_winapi
.
GetFileType
(
handle
)
!=
_winapi
.
FILE_TYPE_CHAR
})
def
_execute_child
(
self
,
args
,
executable
,
preexec_fn
,
close_fds
,
def
_execute_child
(
self
,
args
,
executable
,
preexec_fn
,
close_fds
,
pass_fds
,
cwd
,
env
,
universal_newlines
,
pass_fds
,
cwd
,
env
,
universal_newlines
,
startupinfo
,
creationflags
,
shell
,
startupinfo
,
creationflags
,
shell
,
...
@@ -917,12 +947,44 @@ class Popen(object):
...
@@ -917,12 +947,44 @@ class Popen(object):
# Process startup details
# Process startup details
if
startupinfo
is
None
:
if
startupinfo
is
None
:
startupinfo
=
STARTUPINFO
()
startupinfo
=
STARTUPINFO
()
if
-
1
not
in
(
p2cread
,
c2pwrite
,
errwrite
):
use_std_handles
=
-
1
not
in
(
p2cread
,
c2pwrite
,
errwrite
)
if
use_std_handles
:
startupinfo
.
dwFlags
|=
STARTF_USESTDHANDLES
startupinfo
.
dwFlags
|=
STARTF_USESTDHANDLES
startupinfo
.
hStdInput
=
p2cread
startupinfo
.
hStdInput
=
p2cread
startupinfo
.
hStdOutput
=
c2pwrite
startupinfo
.
hStdOutput
=
c2pwrite
startupinfo
.
hStdError
=
errwrite
startupinfo
.
hStdError
=
errwrite
if
hasattr
(
startupinfo
,
'lpAttributeList'
):
# Support for Python >= 3.7
attribute_list
=
startupinfo
.
lpAttributeList
have_handle_list
=
bool
(
attribute_list
and
"handle_list"
in
attribute_list
and
attribute_list
[
"handle_list"
])
# If we were given an handle_list or need to create one
if
have_handle_list
or
(
use_std_handles
and
close_fds
):
if
attribute_list
is
None
:
attribute_list
=
startupinfo
.
lpAttributeList
=
{}
handle_list
=
attribute_list
[
"handle_list"
]
=
\
list
(
attribute_list
.
get
(
"handle_list"
,
[]))
if
use_std_handles
:
handle_list
+=
[
int
(
p2cread
),
int
(
c2pwrite
),
int
(
errwrite
)]
handle_list
[:]
=
self
.
_filter_handle_list
(
handle_list
)
if
handle_list
:
if
not
close_fds
:
import
warnings
warnings
.
warn
(
"startupinfo.lpAttributeList['handle_list'] "
"overriding close_fds"
,
RuntimeWarning
)
# When using the handle_list we always request to inherit
# handles but the only handles that will be inherited are
# the ones in the handle_list
close_fds
=
False
if
shell
:
if
shell
:
startupinfo
.
dwFlags
|=
STARTF_USESHOWWINDOW
startupinfo
.
dwFlags
|=
STARTF_USESHOWWINDOW
startupinfo
.
wShowWindow
=
SW_HIDE
startupinfo
.
wShowWindow
=
SW_HIDE
...
...
src/greentest/greentest/patched_tests_setup.py
View file @
62129a3c
...
@@ -984,6 +984,22 @@ if PY37:
...
@@ -984,6 +984,22 @@ if PY37:
'test_ssl.ThreadedTests.test_check_hostname_idn'
,
'test_ssl.ThreadedTests.test_check_hostname_idn'
,
]
]
if
APPVEYOR
:
disabled_tests
+=
[
# Raises "AssertionError: wait_threads() failed to cleanup
# 1 threads after 60.0 seconds (count: 3, old count: 2)". reason is
# unknown.
'test_socket.BasicTCPTest.testRecvFrom'
,
# Ditto.
'test_socket.BasicTCPTest.testRecv'
,
'test_socket.BasicTCPTest2.testDetach'
,
'test_socket.BasicTCPTest2.testFromFd'
,
'test_socket.BasicTCPTest2.testOverFlowRecvFrom'
,
'test_socket.BasicTCPTest2.testDup'
,
'test_socket.BasicTCPTest2.testSendAll'
,
'test_socket.NetworkConnectionAttributesTest.testTimeoutDefault'
,
]
# if 'signalfd' in os.environ.get('GEVENT_BACKEND', ''):
# if 'signalfd' in os.environ.get('GEVENT_BACKEND', ''):
# # tests that don't interact well with signalfd
# # tests that don't interact well with signalfd
# disabled_tests.extend([
# disabled_tests.extend([
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment