Joris Vink
d371454dad
do not grab the result if it was in a gatherop
2019-03-19 13:58:00 +01:00
Joris Vink
681a88d535
simplify af_unix recvfrom/sendto support.
2019-03-19 13:27:50 +01:00
Erik Karlsson
d60994abb5
add python sendto recvfrom abstract socket support
2019-03-19 11:11:44 +01:00
Joris Vink
9caa45a050
Allow python validator methods to be async.
2019-03-18 09:34:31 +01:00
Joris Vink
c3ab570f56
Append full module path if it is a directory.
2019-03-16 16:13:52 +01:00
Joris Vink
ec7c8b8e1d
fix a few minor problems with pylock.
...
- when pylocks are deallocated we ended up deleting the wrong object.
- do not call Py_DECREF on the op when inside the op its iternext call.
2019-03-14 17:31:57 +01:00
Joris Vink
2217c7a2c8
pysock: call disable read/write only when needed
2019-03-14 09:27:13 +01:00
Joris Vink
d41054bd26
remove the socket from the event queue on dealloc.
2019-03-13 16:01:42 +01:00
Joris Vink
b06160c768
Make sure coros are woken up on eof.
2019-03-13 15:45:55 +01:00
Joris Vink
3b4574d791
Rework pysocket async/await.
...
Attach the events directly to the pysocket data structure instead of
one event per pysocket_op.
Makes the code easier, gives us a good performance boost and reduces
the number of system calls required when doing an await on a socket.
2019-03-13 11:07:15 +01:00
Joris Vink
01f9b4fcde
Check for EAGAIN when calling connect(2).
...
Linux does this under certain conditions.
2019-03-12 20:04:08 +01:00
Joris Vink
61863bfd3a
kill recv() timer if we have data.
...
also reset any exception that is set when we have successfully
read data from a socket.
2019-03-04 16:37:25 +01:00
Joris Vink
a0c203f507
remove norwegian debug
2019-03-01 20:57:31 +01:00
Joris Vink
31a9a70d5a
cleanup.
2019-03-01 20:56:03 +01:00
Erik Karlsson
01c1a8f8f8
support AF_UNIX in recvfrom()/sendto() python sockets
2019-03-01 20:13:28 +01:00
Joris Vink
1ebd82969c
Add timeout support to proc.recv()
2019-02-26 15:22:55 +01:00
Joris Vink
f4cd70956b
Add an optional timeout to socketop.recv().
2019-02-25 10:35:00 +01:00
Joris Vink
bf1e8e5ffb
bump copyright to 2019
2019-02-22 16:57:28 +01:00
Joris Vink
3dbb80463a
allow double quotes in kore.proc argument lists.
2019-02-22 16:56:34 +01:00
Joris Vink
8040103458
fix for multiple consumers for the async queues.
2019-01-22 11:23:59 +01:00
Joris Vink
d1e87c1a54
deal with PyObject_CallObject() returning NULL.
2019-01-15 10:20:13 +01:00
Joris Vink
b07cc0237c
Support recvfrom()/sendto() on kore python sockets.
2019-01-08 17:49:00 +01:00
Joris Vink
ce3b60b8c8
keep a reference around for tracer.
2018-11-29 09:53:26 +01:00
Joris Vink
d9f543ef5b
Allow user-supplied tracer callback.
2018-11-29 09:51:24 +01:00
Joris Vink
b400fdcd9f
include sys/param.h in python.c
2018-11-29 09:11:31 +01:00
Joris Vink
c431c2bf72
Add support to obtain peer certificate from Python
...
This will return the DER encoded bytes representing the peer certificate.
2018-11-28 11:28:07 +01:00
Joris Vink
5c8efde841
allow foo.method symbols in python.
...
this way you can create page handlers that reside inside
of other objects.
eg:
static / restapi.index
2018-11-16 11:07:21 +01:00
Joris Vink
cb482d8e8f
Always use http_response_stream() in req.response.
...
Keep around the python bytes object while we stream the contents
of it out over the wire. This avoids an entire copy of the data.
2018-11-14 10:03:32 +01:00
Joris Vink
3925ba60ad
don't call close() no underlying socket.
2018-11-12 09:00:36 +01:00
Joris Vink
4cc9e216bb
Don't call close() on the python socket on dealloc
2018-11-06 16:54:26 +01:00
Joris Vink
2dd66586ff
several python improvements.
...
- add kore.time() as equivalent for kore_time_ms().
- call waitpid() until no more children are available for reaping otherwise
we risk missing a process if several die at the same time and only one
SIGCHLD is delivered to us.
- drain a RECV socket operation if eof is set but no exception was given.
2018-10-30 20:28:27 +01:00
Joris Vink
5456f2e1d5
save/restore coro_running in pygather_op_dealloc().
2018-10-30 12:37:30 +01:00
Joris Vink
bb00deca2c
don't leak op in error path
2018-10-29 21:18:38 +01:00
Joris Vink
1c30da855c
Add kore.gather() to the python api.
...
Allows one to run coroutines concurrently and gather all their
results in a single returned list.
If any of the coroutines throw an exception the exception is
returned as the value of that coroutine in the returned list.
2018-10-29 21:16:08 +01:00
Joris Vink
e2651889e0
Add asynchronous subprocess support.
...
This adds kore.proc to the python runtime allowing async processing
handling:
The kore.proc method takes the command to run and an optional timeout
parameter in milliseconds. If the process did not exit normally after
that amount of time a TimeoutError exception is raised.
For instance:
async def run(cmd):
proc = kore.proc(cmd, 1000)
try:
await proc.send("hello")
proc.close_stdin()
except TimeoutError:
proc.kill()
retcode = await proc.reap()
return retcode
2018-10-26 19:19:47 +02:00
Joris Vink
fc5fc4f4ab
make sure timers don't go out of scope.
2018-10-23 21:36:19 +02:00
Joris Vink
8ea32983ae
Add kore.suspend(delay) to python.
...
Will suspend the coroutine for a number of milliseconds.
Example:
async def page(req):
await kore.suspend(1000)
req.response(200, b'')
2018-10-23 21:32:08 +02:00
Joris Vink
47776a9fbb
Hook kore timers into python.
2018-10-23 20:44:43 +02:00
Joris Vink
c41c1db303
Add kore_shutdown().
...
Allows workers to cleanly initiate a shutdown of the
entire server process.
2018-10-23 19:49:42 +02:00
Joris Vink
b70d1ee80f
Add a locking mechanism in pykore.
...
Support the async with syntax:
lock = kore.lock()
async with lock:
# your block
Fix some small issues with other parts of the python system.
2018-10-22 20:09:23 +02:00
Joris Vink
fad5c6ea6f
Give pyqueues "popnow".
2018-10-22 08:28:03 +02:00
Joris Vink
c8795b7d7f
pyqueue improvements.
...
- cleanup queue if it gets deallocated.
- make sure waitables on a queue get removed if their pyqueue_op dies.
2018-10-21 21:58:34 +02:00
Joris Vink
4ae3d23c7e
s/INCREF/DECREF
2018-10-18 22:24:58 +02:00
Joris Vink
0cda9ecfb0
Add an asynchronous queue mechanism.
...
This allows coroutines to submit messages to and pop
messages from a queue in an asynchronous way.
2018-10-18 22:15:21 +02:00
Joris Vink
300daeadef
fix comment
2018-10-16 13:17:44 +02:00
Joris Vink
29202d7330
Make kore_python_log_error() public.
...
While here also make kore_module_load() return the
kore_module data structure pointer it just added
to the modules list.
2018-10-16 13:16:36 +02:00
Joris Vink
20a0103f1e
Add async/await support for socket i/o in python.
...
This means you can now do things like:
resp = await koresock.recv(1024)
await koresock.send(resp)
directly from page handlers if they are defined as async.
Adds lots more to the python goo such as fatalx(), bind_unix(),
task_create() and socket_wrap().
2018-10-15 20:18:54 +02:00
Joris Vink
2449a86085
missing addrtype -> family renames
2018-10-08 20:12:25 +02:00
Joris Vink
71659ab197
correct includes
2018-07-07 13:23:43 +02:00
Joris Vink
92bd546935
Remove unused argument.
2018-04-13 16:04:33 +02:00