Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
35b0fab
start unifying uvloop & winloop together
Vizonex Mar 17, 2026
6827264
Accomplishment: Uvloop now compiles on Windows
Vizonex Mar 18, 2026
0bb1a68
cleanup errors.pyx comments
Vizonex Mar 18, 2026
77bc6dc
forgot about setup.py let's add it
Vizonex Mar 18, 2026
acd5a8b
siginterrupt is not avalible on windows so make it optional
Vizonex Mar 18, 2026
994560c
try placing __forking variables outside of system OS check
Vizonex Mar 18, 2026
d3c2b4a
windows doesn't have childwatchers so disable it
Vizonex Mar 18, 2026
898b310
add gil technqiue for windows to simulate forking
Vizonex Mar 18, 2026
114ae18
add a non-deprecated packaging tool
Vizonex Mar 18, 2026
4037ba8
start introducing windows to the testsuite
Vizonex Mar 18, 2026
7fb3f43
skip fork test in signals if windows
Vizonex Mar 18, 2026
2ed0e62
merge more things from winloop on over to uvloop in test_signals
Vizonex Mar 18, 2026
46bc155
just port all the code over
Vizonex Mar 18, 2026
3d1fc4d
merge more tests
Vizonex Mar 18, 2026
921370b
merge both winloop & uvloop's error handling ways together
Vizonex Mar 18, 2026
250a656
merge more tests
Vizonex Mar 18, 2026
a42c101
merge more of winloop into uvloop, add comment about streams returnin…
Vizonex Mar 18, 2026
aca987b
force trigger workflow temporarly
Vizonex Mar 18, 2026
d8eac6a
Make All versions up to 3.12 work successfully. (#1) (Excluding Windo…
Vizonex Mar 19, 2026
9bd6dd6
temporary fix for working with windows in debug mode
Vizonex Mar 20, 2026
37e54a2
Merge branch 'windows' of https://github.com/Vizonex/uvloop into windows
Vizonex Mar 20, 2026
297be3e
All versions now work excluding debugs for windows in 3.13, 3.14 & 3.14t
Vizonex Mar 20, 2026
3778759
Add __Pyx_MonitoringEventTypes_CyGen_count macro (#3)
Vizonex Mar 21, 2026
2ccaf83
Fix subprocess_shell code (Windows Side) (#4)
Vizonex Mar 21, 2026
0a35c9f
Moved rest of the missing items back to stdlib.pxi (#6)
Vizonex Mar 22, 2026
d3c79f2
update with suggestions made
Vizonex Mar 24, 2026
47ba5e1
swap test_write_buffer_full to skip via wrapper and reenable testing …
Vizonex Apr 6, 2026
d90e020
fix test_pipes.py format
Vizonex Apr 6, 2026
7a2ddc5
Merge branch 'master' into windows
Vizonex Jun 5, 2026
6388dc6
reformat tests
Vizonex Jun 5, 2026
55ed79c
skip test_create_sock_cancel_fd_leak for now... (#8)
Vizonex Jun 5, 2026
1a9f29e
Add Windows debug Makefile workaround. (#9)
Vizonex Jun 27, 2026
a0663f6
CX freeze bugfix windows (#11)
Vizonex Jul 1, 2026
67df390
Tcp Test Fix (#12)
Vizonex Jul 3, 2026
a4c2eff
Merge branch 'master' into windows
Vizonex Jul 14, 2026
3dbf3bf
Implement ssss141414's fixes (#14)
Vizonex Sep 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Make All versions up to 3.12 work successfully. (#1) (Excluding Windo…
…ws with uvloop debug which is broken.)

* add another branch to test on my end

* force trigger workflow

* reformat test_context with black

* reformat all tests to obey flake8

* fix flake8 errors

* add dns related things from winloop

* try something that isn't invalid on 3.8

* reformat with black using valid 3.8 syntax and the 79 character limit

* update setup.py

* fix more formatting problems with test_process

* uncomment trest_process_streams_pass_fds on windows

* slience all other known to fail tests with windows

* fix if statement for dns.pyx

* silencing reamining failures

* remove whitespace

* update tests

* update tests

* skip signal test on apple for now

* remove whitespace

* reformat with black once more
  • Loading branch information
Vizonex authored Mar 19, 2026
commit d8eac6ab04c37ee198be1eef70decada594c0973
3 changes: 1 addition & 2 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
name: Tests

on:
# TODO: (Vizonex) Remove later I'm just a little impaitient...
workflow_dispatch:
push:
branches:
- master
- ci
pull_request:
branches:
- windows
Comment thread
Vizonex marked this conversation as resolved.
Outdated
- master

jobs:
Expand Down
1 change: 0 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,6 @@ def build_extensions(self):
"vendor/libuv/src/win",
"vendor/libuv/include",
],
extra_compile_args=["/std:c11", "/experimental:c11atomics"],
# subset of libuv Windows libraries:
extra_link_args=[
(f"-l{lib}" if MINGW else f"{lib}.lib")
Expand Down
2 changes: 1 addition & 1 deletion tests/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ def suite():
return test_suite


if __name__ == '__main__':
if __name__ == "__main__":
Comment thread
Vizonex marked this conversation as resolved.
Outdated
runner = unittest.runner.TextTestRunner()
result = runner.run(suite())
sys.exit(not result.wasSuccessful())
33 changes: 17 additions & 16 deletions tests/test_aiohttp.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,28 @@ class _TestAioHTTP:

def test_aiohttp_basic_1(self):

PAYLOAD = '<h1>It Works!</h1>' * 10000
PAYLOAD = "<h1>It Works!</h1>" * 10000

async def on_request(request):
return aiohttp.web.Response(text=PAYLOAD)

asyncio.set_event_loop(self.loop)
app = aiohttp.web.Application()
app.router.add_get('/', on_request)
app.router.add_get("/", on_request)

runner = aiohttp.web.AppRunner(app)
self.loop.run_until_complete(runner.setup())
site = aiohttp.web.TCPSite(runner, '0.0.0.0', '0')
site = aiohttp.web.TCPSite(runner, "0.0.0.0", "0")
self.loop.run_until_complete(site.start())
port = site._server.sockets[0].getsockname()[1]

async def test():
# Make sure we're using the correct event loop.
self.assertIs(asyncio.get_event_loop(), self.loop)

for addr in (('localhost', port),
('127.0.0.1', port)):
for addr in (("localhost", port), ("127.0.0.1", port)):
async with aiohttp.ClientSession() as client:
async with client.get('http://{}:{}'.format(*addr)) as r:
async with client.get("http://{}:{}".format(*addr)) as r:
self.assertEqual(r.status, 200)
result = await r.text()
self.assertEqual(result, PAYLOAD)
Expand All @@ -49,42 +48,43 @@ async def test():
self.loop.run_until_complete(runner.cleanup())

def test_aiohttp_graceful_shutdown(self):
if self.implementation == 'asyncio' and sys.version_info >= (3, 12, 0):
if self.implementation == "asyncio" and sys.version_info >= (3, 12, 0):
# In Python 3.12.0, asyncio.Server.wait_closed() waits for all
# existing connections to complete, before aiohttp sends
# on_shutdown signals.
# https://github.com/aio-libs/aiohttp/issues/7675#issuecomment-1752143748
# https://github.com/python/cpython/pull/98582
raise unittest.SkipTest('bug in aiohttp: #7675')
raise unittest.SkipTest("bug in aiohttp: #7675")

async def websocket_handler(request):
ws = aiohttp.web.WebSocketResponse()
await ws.prepare(request)
request.app['websockets'].add(ws)
request.app["websockets"].add(ws)
try:
async for msg in ws:
await ws.send_str(msg.data)
finally:
request.app['websockets'].discard(ws)
request.app["websockets"].discard(ws)
return ws

async def on_shutdown(app):
for ws in set(app['websockets']):
for ws in set(app["websockets"]):
await ws.close(
code=aiohttp.WSCloseCode.GOING_AWAY,
message='Server shutdown')
message="Server shutdown",
)

asyncio.set_event_loop(self.loop)
app = aiohttp.web.Application()
app.router.add_get('/', websocket_handler)
app.router.add_get("/", websocket_handler)
app.on_shutdown.append(on_shutdown)
app['websockets'] = weakref.WeakSet()
app["websockets"] = weakref.WeakSet()

runner = aiohttp.web.AppRunner(app)
self.loop.run_until_complete(runner.setup())
site = aiohttp.web.TCPSite(
runner,
'0.0.0.0',
"0.0.0.0",
0,
# https://github.com/aio-libs/aiohttp/pull/7188
shutdown_timeout=0.1,
Expand All @@ -95,7 +95,8 @@ async def on_shutdown(app):
async def client():
async with aiohttp.ClientSession() as client:
async with client.ws_connect(
'http://127.0.0.1:{}'.format(port)) as ws:
"http://127.0.0.1:{}".format(port)
) as ws:
await ws.send_str("hello")
async for msg in ws:
assert msg.data == "hello"
Expand Down
Loading
Loading