AndreaCensi / contracts

PyContracts is a Python package that allows to declare constraints on function parameters and return values. Contracts can be specified using Python3 annotations, or inside a docstring. PyContracts supports a basic type system, variables binding, arithmetic constraints, and has several specialized contracts and an extension API.
http://andreacensi.github.io/contracts/
Other
398 stars 62 forks source link

pyparsing 2.1.6 breaks pycontracts #50

Closed suranap closed 7 years ago

suranap commented 7 years ago

It works if I use pyparsing 2.1.5. Here's the traceback:

Python 3.5.1 (default, Jul 12 2016, 22:16:50) 
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import contracts  
Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/contracts/useful_contracts/numbers.py", line 6, in <module>
    import numpy  # @UnusedImport
ImportError: No module named 'numpy'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1392, in _parseNoCache
    tokens = fn( instring, tokensStart, retTokens )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1036, in wrapper
    ret = func(*args[limit[0]:])
  File "/usr/lib/python3.5/site-packages/contracts/library/suggester.py", line 108, in parse_action
    raise ParseSyntaxException(pe)
pyparsing.ParseSyntaxException: Unknown identifier 'float'. Did you mean 'Float'? (at char 0), (line:1, col:1)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.5/site-packages/contracts/__init__.py", line 44, in <module>
    from .useful_contracts import *
  File "/usr/lib/python3.5/site-packages/contracts/useful_contracts/__init__.py", line 8, in <module>
    from .numbers import *
  File "/usr/lib/python3.5/site-packages/contracts/useful_contracts/numbers.py", line 8, in <module>
    new_contract('float', 'Float')
  File "/usr/lib/python3.5/site-packages/contracts/main.py", line 535, in new_contract
    return new_contract_impl(*args)
  File "/usr/lib/python3.5/site-packages/contracts/main.py", line 562, in new_contract_impl
    c = parse_contract_string(identifier)
  File "/usr/lib/python3.5/site-packages/contracts/main.py", line 649, in parse_contract_string
    return parse_contract_string_actual(string)
  File "/usr/lib/python3.5/site-packages/contracts/main_actual.py", line 30, in parse_contract_string_actual
    parseAll=True)[0]
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1594, in parseString
    loc, tokens = self._parse( instring, 0 )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3567, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3373, in parseImpl
    ret = e._parse( instring, loc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3567, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3567, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3373, in parseImpl
    ret = e._parse( instring, loc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3567, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3221, in parseImpl
    loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3221, in parseImpl
    loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3567, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3373, in parseImpl
    ret = e._parse( instring, loc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3567, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3221, in parseImpl
    loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3221, in parseImpl
    loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3567, in parseImpl
    return self.expr._parse( instring, loc, doActions, callPreParse=False )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1501, in _parseCache
    value = self._parseNoCache(instring, loc, doActions, callPreParse)
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1366, in _parseNoCache
    loc,tokens = self.parseImpl( instring, preloc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 3373, in parseImpl
    ret = e._parse( instring, loc, doActions )
  File "/usr/lib/python3.5/site-packages/pyparsing.py", line 1504, in _parseCache
    cache.set(lookup, pe.__class__(*pe.args))
TypeError: __init__() takes 2 positional arguments but 4 were given
>>> 
AndreaCensi commented 7 years ago

This should be fixed - I contacted the author of Pyparsing and we worked on a fix.