[Python-ideas] Transpiling contracts
Marko Ristin-Kaufmann
marko.ristin at gmail.com
Mon Oct 1 01:01:34 EDT 2018
Hi James,
Regarding the “transpile into Python” syntax with with statements: Can I
> see an example of this syntax when used in pathlib? I’m a bit worried this
> syntax is too long and “in the way”, unlike decorators which are before the
> function body. Or do you mean that both MockP and your syntax should be
> supported?
>
> Would
>
> with requiring: assert arg1 < arg2, “message”
>
> Be the code you type or the code that’s actually run?
>
That's the code you would type. Let me make a full example (I'm omitting
"with contracts" since we actually don't need it).
You would read/write this:
def some_func(arg1: List[int])->int:
with requiring:
assert len(arg1) > 3, "some description"
with oldie as O, resultie as result, ensuring:
if SLOW:
O.var1 = sum(arg1)
assert result > sum(arg1) > O.var1
assert len(result) > 5
This would run:
@requires(lambda P: len(P.arg1) > 3, "some description")
@snapshot(lambda P, var1: sum(P.arg1), enabled=SLOW)
@ensures(lambda O, P, result: result > sum(arg1) > O.var1, enabled=SLOW)
@ensures(lambda result: len(result) > 5)
I omitted in the example how to specify a custom exception to avoid
confusion.
If we decide that transpiler is the way to go, I'd say it's easier to just
stick with lambdas and allow no mock-based approach in transpilation.
Cheers,
Marko
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20181001/79684382/attachment.html>
More information about the Python-ideas
mailing list