Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
pygolang
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
pygolang
Commits
ba2ab242
Commit
ba2ab242
authored
Nov 02, 2019
by
Kirill Smelkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
context: Add type annotations to function arguments where possible
parent
34e3c404
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
22 additions
and
22 deletions
+22
-22
_context.pyx
golang/_context.pyx
+22
-22
No files found.
golang/_context.pyx
View file @
ba2ab242
...
...
@@ -43,19 +43,19 @@ from cython cimport final
# key -> value dict.
cdef class Context:
# deadline() returns context deadline or None, if there is no deadline.
def deadline(ctx): # -> time | None
def deadline(
Context
ctx): # -> time | None
raise NotImplementedError()
# done returns channel that is closed when the context is canceled.
def done(ctx): # -> pychan(dtype='C.structZ')
def done(
Context
ctx): # -> pychan(dtype='C.structZ')
raise NotImplementedError()
# err returns None if done is not yet closed, or error that explains why context was canceled.
def err(ctx): # -> error
def err(
Context
ctx): # -> error
raise NotImplementedError()
# value returns value associated with key, or None, if context has no key.
def value(
ctx, key):
# -> value | None
def value(
Context ctx, object key):
# -> value | None
raise NotImplementedError()
...
...
@@ -85,7 +85,7 @@ def with_cancel(parent): # -> ctx, cancel
#
# Returned context inherits from parent and in particular has all other
# (key, value) pairs provided by parent.
def with_value(parent,
key,
value): # -> ctx
def with_value(parent,
object key, object
value): # -> ctx
return _ValueCtx({key: value}, parent)
# with_deadline creates new context with deadline.
...
...
@@ -96,7 +96,7 @@ def with_value(parent, key, value): # -> ctx
#
# The caller should explicitly call cancel to release context resources as soon
# the context is no longer needed.
def with_deadline(parent, deadline): # -> ctx, cancel
def with_deadline(parent, d
ouble d
eadline): # -> ctx, cancel
# parent's deadline is before deadline -> just use parent
pdead = parent.deadline()
if pdead is not None and pdead <= deadline:
...
...
@@ -115,7 +115,7 @@ def with_deadline(parent, deadline): # -> ctx, cancel
# with_timeout creates new context with timeout.
#
# it is shorthand for with_deadline(parent, now+timeout).
def with_timeout(parent, timeout): # -> ctx, cancel
def with_timeout(parent,
double
timeout): # -> ctx, cancel
return with_deadline(parent, time.now() + timeout)
# merge merges 2 contexts into 1.
...
...
@@ -166,7 +166,7 @@ cdef class _BaseCtx:
cdef object _err
cdef object _done # pychan | None
def __init__(
ctx, done, *parentv):
def __init__(
_BaseCtx ctx, done, *parentv): # XXX done -> pychan?
ctx._parentv = parentv
ctx._mu = _pysync.PyMutex()
...
...
@@ -181,18 +181,18 @@ cdef class _BaseCtx:
ctx._propagateCancel()
def done(ctx):
def done(
_BaseCtx
ctx):
if ctx._done is not None:
return ctx._done
return ctx._parentv[0].done()
def err(ctx):
def err(
_BaseCtx
ctx):
with ctx._mu:
return ctx._err
# value returns value for key from one of its parents.
# this behaviour is inherited by all contexts except _ValueCtx who amends it.
def value(
ctx,
key):
def value(
_BaseCtx ctx, object
key):
for parent in ctx._parentv:
v = parent.value(key)
if v is not None:
...
...
@@ -201,7 +201,7 @@ cdef class _BaseCtx:
# deadline returns the earliest deadline of parents.
# this behaviour is inherited by all contexts except _TimeoutCtx who overrides it.
def deadline(ctx):
def deadline(
_BaseCtx
ctx):
d = None
for parent in ctx._parentv:
pd = parent.deadline()
...
...
@@ -210,12 +210,12 @@ cdef class _BaseCtx:
return d
# _cancel cancels ctx and its children.
def _cancel(ctx, err):
def _cancel(
_BaseCtx
ctx, err):
return ctx._cancelFrom(None, err)
# _cancelFrom cancels ctx and its children.
# if cancelFrom != None it indicates which ctx parent cancellation was the cause for ctx cancel.
def _cancelFrom(ctx, cancelFrom, err):
def _cancelFrom(
_BaseCtx
ctx, cancelFrom, err):
with ctx._mu:
if ctx._err is not None:
return # already canceled
...
...
@@ -243,7 +243,7 @@ cdef class _BaseCtx:
# propagateCancel establishes setup so that whenever a parent is canceled,
# ctx and its children are canceled too.
def _propagateCancel(ctx):
def _propagateCancel(
_BaseCtx
ctx):
pforeignv = [] # parents with !pynilchan .done() for foreign contexts
for parent in ctx._parentv:
# if parent can never be canceled (e.g. it is background) - we
...
...
@@ -283,7 +283,7 @@ cdef class _BaseCtx:
# _CancelCtx is context that can be canceled.
cdef class _CancelCtx(_BaseCtx):
def __init__(ctx, *parentv):
def __init__(
_CancelCtx
ctx, *parentv):
super(_CancelCtx, ctx).__init__(pychan(dtype='C.structZ'), *parentv)
...
...
@@ -294,11 +294,11 @@ cdef class _ValueCtx(_BaseCtx):
# does not change after setup.
cdef dict _kv
def __init__(
ctx,
kv, parent):
def __init__(
_ValueCtx ctx, dict
kv, parent):
super(_ValueCtx, ctx).__init__(None, parent)
ctx._kv = kv
def value(
ctx,
key):
def value(
_ValueCtx ctx, object
key):
v = ctx._kv.get(key)
if v is not None:
return v
...
...
@@ -310,24 +310,24 @@ cdef class _TimeoutCtx(_CancelCtx):
cdef double _deadline
cdef object _timer # pytime.Timer
def __init__(
ctx, timeout,
deadline, parent):
def __init__(
_TimeoutCtx ctx, double timeout, double
deadline, parent):
super(_TimeoutCtx, ctx).__init__(parent)
assert timeout > 0
ctx._deadline = deadline
ctx._timer = pytime.after_func(timeout, lambda: ctx._cancel(deadlineExceeded))
def deadline(ctx):
def deadline(
_TimeoutCtx
ctx):
return ctx._deadline
# cancel -> stop timer
def _cancelFrom(ctx, cancelFrom, err):
def _cancelFrom(
_TimeoutCtx
ctx, cancelFrom, err):
super(_TimeoutCtx, ctx)._cancelFrom(cancelFrom, err)
ctx._timer.stop()
# _ready returns whether channel ch is ready.
def _ready(ch):
def _ready(
pychan
ch):
_, _rx = pyselect(
ch.recv, # 0
pydefault, # 1
...
...
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