Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PR for 3.x development #6

Open
wants to merge 159 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
159 commits
Select commit Hold shift + click to select a range
2ccff72
drop python 2 support
cjw296 Feb 14, 2020
c115583
Drop the mapping interface from Context
cjw296 Feb 14, 2020
3ef4825
Only store one annotation.
cjw296 Feb 14, 2020
1213113
factor out a method to get a single requirement.
cjw296 Feb 14, 2020
8c2ba7b
make context importable from the top level mush package.
cjw296 Feb 14, 2020
65800e5
Split declaration extraction between requires and returns.
cjw296 Feb 14, 2020
de63995
Allow Context.call to extract requirements.
cjw296 Feb 14, 2020
2c4e90d
Rename stuff in Context.add to closer match current intentions.
cjw296 Feb 16, 2020
7ae6fbe
move the default requires/returns down into the context from the call…
cjw296 Feb 16, 2020
670767d
unused import
cjw296 Feb 15, 2020
29b42c6
No longer needed with latest testfixtures
cjw296 Feb 16, 2020
490e409
unused
cjw296 Feb 16, 2020
9537b95
Factor out a requirement class as a step to more flexible requirement…
cjw296 Feb 16, 2020
c982e23
simplify requires class to a list subclass
cjw296 Feb 16, 2020
503074e
move annotation declarations tests back into test_declarations
cjw296 Feb 16, 2020
f7bc6f9
Make provides an optional argument to Context.add
cjw296 Feb 16, 2020
6e4a333
Add support for context-side resolvers
cjw296 Feb 16, 2020
23cd986
Add support for explicit removal from a context.
cjw296 Feb 16, 2020
f90c099
Allow context to be obtained from itself.
cjw296 Feb 16, 2020
dfeb10a
Make lazy resolution no longer a special case in the Context.
cjw296 Feb 16, 2020
cbbf31a
Drop the lazy decorator.
cjw296 Feb 16, 2020
4b366cb
optimisation for a very common path.
cjw296 Feb 16, 2020
a09c906
Make Context.get() simpler.
cjw296 Feb 16, 2020
c57f733
standardise on 'key' for the name of parameters that take a ResourceKey
cjw296 Feb 16, 2020
47a944b
Resolvers should take a default.
cjw296 Feb 17, 2020
e0a5961
tighten up sphinx builds and easy markup using :any: by default.
cjw296 Feb 19, 2020
e35ac13
restructure how Runner.replace works to make extract_(requires|return…
cjw296 Feb 19, 2020
e6be88c
implement a comparer for Requirements, so we can start refactoring them.
cjw296 Feb 19, 2020
460b966
Move target back into the requires object.
cjw296 Feb 19, 2020
b0ca094
First step into allowing explicit requirement objects.
cjw296 Feb 19, 2020
7de2b3f
lose vestigial `spec` attribute and give Requirement a proper repr.
cjw296 Feb 19, 2020
31caa66
Remove the optional how in favour of just using defaults.
cjw296 Feb 20, 2020
89583e1
Add support for nested contexts.
cjw296 Feb 21, 2020
ff3e77a
Switch to storing values for the common case.
cjw296 Feb 22, 2020
e5897cd
Add pytest-asyncio for testing.
cjw296 Feb 22, 2020
0333af2
Using another module's marker is probably not going to end well in th…
cjw296 Feb 22, 2020
44dd97c
Drop support for getting context from itself.
cjw296 Feb 23, 2020
8a98888
Implementation of an asyncio-compatible Context.
cjw296 Feb 23, 2020
00ee208
Add support for custom requirement classes.
cjw296 Feb 23, 2020
fb955bf
Add support for requirements being explicitly specified and combined.
cjw296 Feb 24, 2020
2af74b8
Move logic out of RequiresType constructor.
cjw296 Feb 25, 2020
a322e92
clarify types of resolver
cjw296 Feb 25, 2020
70fa1ad
Replace all the hows with a more flexible Value.
cjw296 Feb 25, 2020
520c790
move code around to make it easier to read through
cjw296 Feb 25, 2020
d7c0d6a
better name for this helper
cjw296 Feb 25, 2020
eaa1cce
Correct declaration tests to use more explicit expectations.
cjw296 Feb 25, 2020
d190666
Allow Value to support getting attributes with internal names.
cjw296 Feb 26, 2020
6cdc4ff
Try not to ever mutate declarations that are passed in.
cjw296 Feb 26, 2020
ead652b
extract type and default information even when a declaration is present
cjw296 Feb 26, 2020
6348794
Use the parameter name in favour of the type for simple types.
cjw296 Feb 26, 2020
123482c
remove unused code path
cjw296 Feb 26, 2020
4c3a0b1
Don't do generative getattr with special names.
cjw296 Feb 27, 2020
f92c7aa
Rework declaration extraction to layer all sources.
cjw296 Feb 27, 2020
7f647f7
Add support for overriding the default type used for individual param…
cjw296 Feb 27, 2020
9c6d2ed
Add more stuff to the public api.
cjw296 Feb 27, 2020
693bf8e
introduce support for using types as resource keys.
cjw296 Feb 28, 2020
71bb958
Aggressively cache the results of extracting declarations.
cjw296 Feb 28, 2020
834eb28
Pivot to caching declarations in the context.
cjw296 Feb 28, 2020
4ed1685
Split asyncio stuff into its own module, but with identical names.
cjw296 Feb 29, 2020
c001170
Round out the API available to synchronous callable from an asynchron…
cjw296 Feb 29, 2020
3cbe9ef
Collapse Value down into Requirement.
cjw296 Mar 9, 2020
e586723
Replace default requirement type with a requirement modifier callable.
cjw296 Mar 9, 2020
b349af6
Get rid of resolvable resources now that lazy is container within run…
cjw296 Mar 9, 2020
8efc0af
factor out a get_sync
cjw296 Mar 9, 2020
552a955
tuple generics' have a __name__ on Py3.6
cjw296 Mar 10, 2020
0e0b9f9
make the name for this class more sensible
cjw296 Mar 10, 2020
43b6185
Add a marker indicating that even if a callable is synchronous, it do…
cjw296 Mar 10, 2020
680f8dc
Split out a simpler ResourceError and move ContextError to be with th…
cjw296 Mar 10, 2020
137c03d
round out code coverage
cjw296 Mar 10, 2020
fb66793
Add a Call resolver for both sync and async use.
cjw296 Mar 10, 2020
3fac6e2
move requirement tests to test_requirements
cjw296 Mar 10, 2020
dd5d37c
remove py3 suffix.
cjw296 Mar 10, 2020
b6a256e
Add AnyOf requirement.
cjw296 Mar 10, 2020
0e973d8
Move this type to helpers.py
cjw296 Mar 10, 2020
c2348f8
Add a Like requirement that searches up the requested type's mro.
cjw296 Mar 10, 2020
a8d24ff
expose Requirement as a top-level name
cjw296 Mar 10, 2020
151454b
make no_threads a helper not a fixture.
cjw296 Mar 26, 2020
9eea87f
Fix bug when context passed to runner but has no start point.
cjw296 Mar 26, 2020
c8ebcea
move set_mush/get_mush to markers.py so they can be used there.
cjw296 Mar 26, 2020
e67368f
Add explicit support for marking callables as blocking or non-blocking.
cjw296 Mar 26, 2020
886fa9e
Split `nothing` into `requires_nothing` and `returns_nothing`.
cjw296 Apr 2, 2020
45380db
Async Runner implementation.
cjw296 Mar 29, 2020
8ae38de
better local variable names and leave guessing the type to the context.
cjw296 Mar 29, 2020
26a0317
By default, no longer add context manager to the mush context when th…
cjw296 Apr 2, 2020
c1cac5c
work around deficiencies in iscoroutinefunction's ability to spot asy…
cjw296 Apr 3, 2020
ce0be56
don't blow up when cloning and empty runner.
cjw296 Apr 3, 2020
2216c06
fix bug where a requirement of a non-default type that was explicitly…
cjw296 Apr 7, 2020
57f7988
keep markers singleton, even when copied
cjw296 Apr 7, 2020
9d90311
Use a real runner here.
cjw296 Apr 8, 2020
8c4d976
fix nasty bug in requirement extraction
cjw296 Apr 8, 2020
1ee555c
simplify down repr of requirements and use consistently
cjw296 Apr 8, 2020
2300910
Replace requirement.clone with .make and .make_from.
cjw296 Apr 8, 2020
c5f7563
Raise exceptions for problems around lazy resources
cjw296 Apr 9, 2020
810ecc4
Add requirement_modifier support to Runners.
cjw296 Apr 9, 2020
7f71c84
Requirement.key no longer needs to be optional.
cjw296 Apr 13, 2020
330b0c8
add more typing information
cjw296 Apr 13, 2020
c18a572
Don't unnecessarily recreate requires() objects
cjw296 Apr 13, 2020
50f97b1
rename module to match stdlib one
cjw296 Apr 13, 2020
1058df5
fix infinite recursion when last callpoint is a context manager
cjw296 Apr 17, 2020
0e36009
fix type definition for tuple of requirements
cjw296 Apr 18, 2020
9c39177
Move to testfixtures mock facade
cjw296 Apr 20, 2020
01984b9
move to circleci matrix stuff
cjw296 Apr 23, 2020
92429a4
No need for requirement_modifier to be private.
cjw296 Apr 28, 2020
b698f28
None as a default turns out to be worse than raising an exception in …
cjw296 Apr 28, 2020
9d74b14
whitespace
cjw296 Apr 28, 2020
1c3efd7
Remove Call requirements.
cjw296 May 12, 2020
a20374f
ignore ellipsis examples too
cjw296 Jun 5, 2020
964e208
checkpoint: just starting requirement extraction
cjw296 Jun 5, 2020
be4ca8f
simple requirements and resources
cjw296 Sep 17, 2020
d72f3ee
split extractions tests from declaration test
cjw296 Sep 21, 2020
5997a5f
comment out more stuff that may not end up being needed
cjw296 Sep 21, 2020
2836500
bugfix: keys typing
cjw296 Sep 21, 2020
8dee15f
kill context.get
cjw296 Sep 23, 2020
7810b7b
Implement providers
cjw296 Sep 23, 2020
891ac02
Better repr for NewTypes and further typing tests.
cjw296 Sep 23, 2020
07b413b
add skips so the whole test suite can be run
cjw296 Sep 24, 2020
1ad898e
pattern for test suites that will only compile on a minimum version o…
cjw296 Sep 24, 2020
98bcda0
keyword-only and positional-only arguments
cjw296 Sep 24, 2020
50d5bc1
Lose the Type suffix
cjw296 Sep 25, 2020
ee4c561
Better typing
cjw296 Sep 25, 2020
e114e88
Add another layer so we should never have to modify a Requirement.
cjw296 Sep 25, 2020
f95bda5
requirements extraction using parameter objects
cjw296 Sep 28, 2020
dad4922
re-instate ops
cjw296 Sep 28, 2020
26ecf23
more succinct repr of ResourceKeys
cjw296 Sep 29, 2020
3d578d0
__copy__ no longer needed on Markers
cjw296 Sep 30, 2020
05af1d4
Have a type_repr instead of name_or_repr
cjw296 Sep 30, 2020
5a3d400
Introduce the Annotation requirement type.
cjw296 Sep 30, 2020
d15b530
Finish off Value implementation.
cjw296 Sep 30, 2020
2ac4e48
tighten up typing around resource types
cjw296 Sep 30, 2020
bb53fcf
AnyOf
cjw296 Sep 30, 2020
c569915
Like
cjw296 Sep 30, 2020
be7bf18
Rename declaration types.
cjw296 Oct 1, 2020
6f71f7b
move update_wrapper to a more appropriate module
cjw296 Oct 2, 2020
bf7ea99
Polish up requirements extraction and specification.
cjw296 Oct 5, 2020
7bb5377
Re-implement returns declaration and extraction.
cjw296 Oct 5, 2020
5fedbaa
Bring back context.extract()
cjw296 Oct 5, 2020
245ae9c
Allow additional declarations to be explicitly supplied.
cjw296 Oct 8, 2020
d922f70
Turns out it's better to use type in preference to identifier.
cjw296 Oct 8, 2020
992fc1f
Bring back runners.
cjw296 Oct 8, 2020
4abf759
Allow requirements to post-process the resource.
cjw296 Oct 8, 2020
5f6075c
uncomment remaining tests and mark skipped with reasons
cjw296 Oct 8, 2020
fa2db92
Implement default requirement types for context.
cjw296 Oct 8, 2020
17cd296
Add support for requirement completion and drop support for requireme…
cjw296 Oct 11, 2020
edb4343
drop remove until there's a real need
cjw296 Oct 11, 2020
fdca8a1
drop caching until there's something we can profile
cjw296 Oct 11, 2020
f879551
Bring back nesting.
cjw296 Oct 13, 2020
712e80f
Add the first key from the requirement as a resource.
cjw296 Oct 14, 2020
8488a47
Bring back asyncio
cjw296 Oct 14, 2020
860d213
Python 3.6 compatibility.
cjw296 Oct 14, 2020
10288e0
Test min and max versions.
cjw296 Oct 14, 2020
962aa6d
https://github.com/nedbat/coveragepy/issues/1042
cjw296 Oct 14, 2020
ca3298e
sort out coverage
cjw296 Oct 14, 2020
8edf7b9
Better representation of failed runners.
cjw296 Oct 15, 2020
eb5e5fd
Safer repr for requirements to help out with subclasses.
cjw296 Oct 15, 2020
1649bf5
Fix bug where providers in a base context couldn't use resources foun…
cjw296 Oct 27, 2020
4622b80
move this test to the correct suite
cjw296 Oct 28, 2020
76bab1d
scorched earth...
cjw296 Mar 9, 2021
e287270
Initial Context and Paradigm(s) implementation.
cjw296 Mar 31, 2021
4e883d9
adjust coverage config
cjw296 Mar 31, 2021
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
16 changes: 8 additions & 8 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
version: 2.1

orbs:
python: cjw296/python-ci@1.2
python: cjw296/python-ci@2.1

common: &common
jobs:

- python/pip-run-tests:
name: python27
image: circleci/python:2.7
- python/pip-run-tests:
name: python37
image: circleci/python:3.7
matrix:
parameters:
image:
- circleci/python:3.6
- circleci/python:3.9

- python/coverage:
name: coverage
image: circleci/python:3.9
requires:
- python27
- python37
- python/pip-run-tests

- python/release:
name: release
Expand Down
6 changes: 5 additions & 1 deletion .coveragerc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[run]
source = mush
source = mush,tests

[report]
exclude_lines =
Expand All @@ -9,4 +9,8 @@ exclude_lines =

# stuff that we don't worry about
pass
\.\.\.
__name__ == '__main__'

# circular references needed for type checking:
if TYPE_CHECKING:
2 changes: 1 addition & 1 deletion docs/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ PAPER =
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d _build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
ALLSPHINXOPTS = -W --keep-going -d _build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .

.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest

Expand Down
2 changes: 1 addition & 1 deletion docs/api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ API Reference
:members: Modifier

.. automodule:: mush.declarations
:members: how, nothing, result_type, update_wrapper
:members: how, nothing, result_type, update_wrapper, DeclarationsFrom

.. automodule:: mush.plug
:members: insert, ignore, append, Plug
1 change: 1 addition & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,4 @@
'Simplistix Ltd', 'manual'),
]

default_role = 'any'
7 changes: 2 additions & 5 deletions docs/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
from sybil.parsers.codeblock import CodeBlockParser
from sybil.parsers.doctest import DocTestParser

from mush.compat import PY2

sybil_collector = Sybil(
parsers=[
DocTestParser(optionflags=REPORT_NDIFF|ELLIPSIS),
Expand All @@ -17,6 +15,5 @@
).pytest()


def pytest_collect_file(parent, path):
if not PY2:
return sybil_collector(parent, path)
# def pytest_collect_file(parent, path):
# return sybil_collector(parent, path)
76 changes: 38 additions & 38 deletions docs/use.txt
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,6 @@ I made an apple
I turned an apple into an orange
I made juice out of an apple and an orange

.. _optional-resources:

Optional requirements
~~~~~~~~~~~~~~~~~~~~~

Expand All @@ -209,17 +207,17 @@ take this into account. Take the following function:

.. code-block:: python

def greet(name='stranger'):
def greet(name: str = 'stranger'):
print('Hello ' + name + '!')

If a name is not always be available, it can be added to a runner as follows:
If a name is not always be available, the callable's default will be used:

.. code-block:: python

from mush import Runner, optional
from mush import Runner

runner = Runner()
runner.add(greet, requires=optional(str))
runner.add(greet)

Now, when this runner is called, the default will be used:

Expand All @@ -231,13 +229,14 @@ available:

.. code-block:: python

from mush import Runner, optional
from mush import Runner, returns

@returns('name')
def my_name_is():
return 'Slim Shady'

runner = Runner(my_name_is)
runner.add(greet, requires=optional(str))
runner.add(greet)

In this case, the string returned will be used:

Expand Down Expand Up @@ -276,12 +275,12 @@ of the returns resources through to the :func:`pick` function:

.. code-block:: python

from mush import Runner, attr, item, requires
from mush import Runner, requires, Value

runner = Runner(some_attributes, some_items)
runner.add(pick, requires(fruit1=attr(Stuff, 'fruit'),
fruit2=item(dict, 'fruit'),
fruit3=item(attr(Stuff, 'tree'), 'fruit')))
runner.add(pick, requires(fruit1=Value(Stuff).fruit,
fruit2=Value(dict)['fruit'],
fruit3=Value(Stuff).tree['fruit']))

So now we can pick fruit from some interesting places:

Expand Down Expand Up @@ -376,17 +375,18 @@ I sold vegetables as fruit
I made juice out of a tomato and a cucumber

Finally, if you have a callable that returns results that you wish to ignore,
you can do so using :attr:`~mush.declarations.nothing`:
you can do so as follows:

.. code-block:: python

from mush import Runner, nothing
from mush import Runner

@returns()
def spam():
return 'spam'

runner = Runner()
runner.add(spam, returns=nothing)
runner.add(spam)

.. _named-resources:

Expand Down Expand Up @@ -538,9 +538,6 @@ I turned an apple into an orange
I made juice out of an apple and an orange
a refreshing fruit beverage

If an argument has a default, then the requirement will be made
:ref:`optional <optional-resources>`.

Configuration Precedence
~~~~~~~~~~~~~~~~~~~~~~~~

Expand Down Expand Up @@ -653,10 +650,10 @@ the representation of a runner gives all this information:
>>> runner
<Runner>
<function forge ...> requires() returns_result_type()
<function polish ...> requires(Ring) returns_result_type() <-- forged
<function engrave ...> requires(Ring) returns_result_type()
<function more_polish ...> requires(Ring) returns_result_type() <-- engraved
<function package at ...> requires(Ring) returns_result_type()
<function polish ...> requires(Value(Ring)) returns_result_type() <-- forged
<function engrave ...> requires(Value(Ring)) returns_result_type()
<function more_polish ...> requires(Value(Ring)) returns_result_type() <-- engraved
<function package at ...> requires(Value(Ring)) returns_result_type()
</Runner>

As you can see above, when a callable is inserted at a label, the label
Expand All @@ -679,7 +676,7 @@ Now, when you add to a specific label, only that label is moved:
>>> runner
<Runner>
<function forge ...> requires() returns_result_type() <-- before_polish
<function polish ...> requires('ring') returns_result_type() <-- after_polish
<function polish ...> requires(Value('ring')) returns_result_type() <-- after_polish
</Runner>

Of course, you can still add to the end of the runner:
Expand All @@ -689,8 +686,8 @@ Of course, you can still add to the end of the runner:
>>> runner
<Runner>
<function forge ...> requires() returns_result_type() <-- before_polish
<function polish ...> requires('ring') returns_result_type() <-- after_polish
<function package ...> requires('ring') returns_result_type()
<function polish ...> requires(Value('ring')) returns_result_type() <-- after_polish
<function package ...> requires(Value('ring')) returns_result_type()
</Runner>

However, the point modifier returned by getting a label from a runner will
Expand All @@ -700,9 +697,9 @@ keep on moving the label as more callables are added using it:
>>> runner
<Runner>
<function forge ...> requires() returns_result_type() <-- before_polish
<function polish ...> requires('ring') returns_result_type()
<function more_polish ...> requires('ring') returns_result_type() <-- after_polish
<function package ...> requires('ring') returns_result_type()
<function polish ...> requires(Value('ring')) returns_result_type()
<function more_polish ...> requires(Value('ring')) returns_result_type() <-- after_polish
<function package ...> requires(Value('ring')) returns_result_type()
</Runner>

.. _plugs:
Expand Down Expand Up @@ -924,11 +921,13 @@ a remote web service:

.. code-block:: python

from mush import Runner, Value

def load_config() -> 'config':
return json.loads(urllib2.urlopen('...').read())

def do_stuff(username: item('config', 'username'),
password: item('config', 'password')):
def do_stuff(username: Value('config')['username'],
password: Value('config')['password']):
print('doing stuff as ' + username + ' with '+ password)

runner = Runner(load_config, do_stuff)
Expand All @@ -949,14 +948,15 @@ If you have a base runner such as this:
.. code-block:: python

from argparse import ArgumentParser, Namespace
from mush import Runner, Value

def base_args(parser):
parser.add_argument('config_url')

def parse_args(parser):
return parser.parse_args()

def load_config():
def load_config(config_url):
return json.loads(urllib2.urlopen('...').read())

def finalise_things():
Expand All @@ -965,7 +965,7 @@ If you have a base runner such as this:
base_runner = Runner(ArgumentParser)
base_runner.add(base_args, requires=ArgumentParser, label='args')
base_runner.add(parse_args, requires=ArgumentParser)
point = base_runner.add(load_config, requires=attr(Namespace, 'config_url'),
point = base_runner.add(load_config, requires=Value(Namespace).config_url,
returns='config')
point.add_label('body')
base_runner.add(finalise_things, label='ending')
Expand All @@ -977,8 +977,8 @@ That runner might be used for a specific script as follows:
def job_args(parser: ArgumentParser):
parser.add_argument('--colour')

def do_stuff(username: item('config', 'username'),
colour: attr(Namespace, 'colour')):
def do_stuff(username: Value('config')['username'],
colour: Value(Namespace).colour):
print(username + ' is '+ colour)

runner = base_runner.clone()
Expand Down Expand Up @@ -1019,12 +1019,12 @@ For example, consider this runner:

.. code-block:: python

from mush import Runner
from mush import Runner, Value

def make_config() -> 'config':
return {'foo': 'bar'}

def connect(foo: item('config', 'foo')):
def connect(foo = Value('config')['foo']):
return 'connection'

def process(connection):
Expand All @@ -1040,8 +1040,8 @@ To see how the configuration panned out, we would look at the :func:`repr`:
>>> runner
<Runner>
<function make_config ...> requires() returns('config')
<function connect ...> requires(foo='config'['foo']) returns_result_type() <-- config
<function process ...> requires('connection') returns_result_type()
<function connect ...> requires(Value('config')['foo']) returns_result_type() <-- config
<function process ...> requires(Value('connection')) returns_result_type()
</Runner>

As you can see, there is a problem with this configuration that will be exposed
Expand Down
15 changes: 1 addition & 14 deletions mush/__init__.py
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,14 +1 @@
from .runner import Runner
from .declarations import (
requires,
returns_result_type, returns_mapping, returns_sequence, returns,
optional, attr, item, nothing
)
from .plug import Plug

__all__ = [
'Runner',
'requires', 'optional',
'returns_result_type', 'returns_mapping', 'returns_sequence', 'returns',
'attr', 'item', 'Plug', 'nothing'
]
from .context import Context
33 changes: 0 additions & 33 deletions mush/callpoints.py

This file was deleted.

Loading