belyalov / tinyweb

Simple and lightweight HTTP async server for micropython
MIT License
247 stars 40 forks source link

shutdown() tries to access non-existent attribute "cancel" on uasyncio module #46

Open phlipped opened 2 years ago

phlipped commented 2 years ago

https://github.com/belyalov/tinyweb/blob/33d73c90f005cfd3423affe358cad0f13c37728f/tinyweb/server.py#L689

Board: esp8266, generic nodeMCU dev board Micropython: 1.17 (esp8266 port), with frozen modules tinyweb and logging

I'm trying to perform the "shutdown" procedure as per instructions in the reference material for the webserver class, i.e.

async def all_shutdown():
    await asyncio.sleep_ms(100)

try:
    web = tinyweb.webserver()
    web.run()
except KeyboardInterrupt as e:
    print(' CTRL+C pressed - terminating...')
    web.shutdown()
    uasyncio.get_event_loop().run_until_complete(all_shutdown())

When I run my server then hit Ctrl-C, I get:

Traceback (most recent call last):
  File "main.py", line 30, in run
  File "tinyweb/server.py", line 689, in shutdown
  File "uasyncio/__init__.py", line 1, in __getattr__
AttributeError: cancel
robartsd commented 1 year ago

Correct, according to the latest documentation uasyncio has no cancel() function at the module level. I think what is intended is to call the cancel() method of the Task class; however, I don't see that the code is saving references to the task instances returned calls to the loop .create_task() method.

ClaasF commented 1 year ago

Is there some way to shut the server down then?

I'm trying to shut it down after receiving a request and currently I can't find any way to do it.