mirror of
https://github.com/graphql-python/graphene.git
synced 2024-11-22 01:26:49 +03:00
Add pre-commit tool to repository, and run on all files
This commit is contained in:
parent
12d4dab774
commit
9777184721
17
.pre-commit-config.yaml
Normal file
17
.pre-commit-config.yaml
Normal file
|
@ -0,0 +1,17 @@
|
|||
- repo: git://github.com/pre-commit/pre-commit-hooks
|
||||
sha: v0.8.0
|
||||
hooks:
|
||||
- id: autopep8-wrapper
|
||||
args:
|
||||
- -i
|
||||
- --ignore=E128,E309,E501
|
||||
exclude: ^docs/.*$
|
||||
- id: check-json
|
||||
- id: check-yaml
|
||||
- id: debug-statements
|
||||
- id: end-of-file-fixer
|
||||
exclude: ^docs/.*$
|
||||
- id: trailing-whitespace
|
||||
- id: pretty-format-json
|
||||
args:
|
||||
- --autofix
|
|
@ -278,7 +278,7 @@ Now you can create abstact types super easily, without the need of subclassing t
|
|||
class Base(ObjectType):
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
id = ID()
|
||||
|
||||
def resolve_id(self, info):
|
||||
|
|
|
@ -22,7 +22,7 @@ class Query(graphene.ObjectType):
|
|||
|
||||
|
||||
class CreateAddress(graphene.Mutation):
|
||||
|
||||
|
||||
class Arguments:
|
||||
geo = GeoInput(required=True)
|
||||
|
||||
|
|
|
@ -662,6 +662,8 @@ def __new__(cls, value):
|
|||
if member.value == value:
|
||||
return member
|
||||
raise ValueError("%s is not a valid %s" % (value, cls.__name__))
|
||||
|
||||
|
||||
temp_enum_dict['__new__'] = __new__
|
||||
del __new__
|
||||
|
||||
|
@ -669,12 +671,16 @@ del __new__
|
|||
def __repr__(self):
|
||||
return "<%s.%s: %r>" % (
|
||||
self.__class__.__name__, self._name_, self._value_)
|
||||
|
||||
|
||||
temp_enum_dict['__repr__'] = __repr__
|
||||
del __repr__
|
||||
|
||||
|
||||
def __str__(self):
|
||||
return "%s.%s" % (self.__class__.__name__, self._name_)
|
||||
|
||||
|
||||
temp_enum_dict['__str__'] = __str__
|
||||
del __str__
|
||||
|
||||
|
@ -705,6 +711,8 @@ def __format__(self, format_spec):
|
|||
cls = self._member_type_
|
||||
val = self.value
|
||||
return cls.__format__(val, format_spec)
|
||||
|
||||
|
||||
temp_enum_dict['__format__'] = __format__
|
||||
del __format__
|
||||
|
||||
|
@ -751,6 +759,8 @@ def __eq__(self, other):
|
|||
if isinstance(other, self.__class__):
|
||||
return self is other
|
||||
return NotImplemented
|
||||
|
||||
|
||||
temp_enum_dict['__eq__'] = __eq__
|
||||
del __eq__
|
||||
|
||||
|
@ -759,18 +769,24 @@ def __ne__(self, other):
|
|||
if isinstance(other, self.__class__):
|
||||
return self is not other
|
||||
return NotImplemented
|
||||
|
||||
|
||||
temp_enum_dict['__ne__'] = __ne__
|
||||
del __ne__
|
||||
|
||||
|
||||
def __hash__(self):
|
||||
return hash(self._name_)
|
||||
|
||||
|
||||
temp_enum_dict['__hash__'] = __hash__
|
||||
del __hash__
|
||||
|
||||
|
||||
def __reduce_ex__(self, proto):
|
||||
return self.__class__, (self._value_, )
|
||||
|
||||
|
||||
temp_enum_dict['__reduce_ex__'] = __reduce_ex__
|
||||
del __reduce_ex__
|
||||
|
||||
|
@ -785,6 +801,8 @@ del __reduce_ex__
|
|||
@_RouteClassAttributeToGetattr
|
||||
def name(self):
|
||||
return self._name_
|
||||
|
||||
|
||||
temp_enum_dict['name'] = name
|
||||
del name
|
||||
|
||||
|
@ -792,6 +810,8 @@ del name
|
|||
@_RouteClassAttributeToGetattr
|
||||
def value(self):
|
||||
return self._value_
|
||||
|
||||
|
||||
temp_enum_dict['value'] = value
|
||||
del value
|
||||
|
||||
|
@ -817,6 +837,8 @@ def _convert(cls, name, module, filter, source=None):
|
|||
module_globals.update(cls.__members__)
|
||||
module_globals[name] = cls
|
||||
return cls
|
||||
|
||||
|
||||
temp_enum_dict['_convert'] = _convert
|
||||
del _convert
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ def formatannotation(annotation, base_module=None):
|
|||
if isinstance(annotation, type):
|
||||
if annotation.__module__ in ('builtins', '__builtin__', base_module):
|
||||
return annotation.__name__
|
||||
return annotation.__module__+'.'+annotation.__name__
|
||||
return annotation.__module__ + '.' + annotation.__name__
|
||||
return repr(annotation)
|
||||
|
||||
|
||||
|
@ -126,7 +126,7 @@ def signature(obj):
|
|||
_partial_kwarg=True)
|
||||
|
||||
elif (param.kind not in (_VAR_KEYWORD, _VAR_POSITIONAL) and
|
||||
not param._partial_kwarg):
|
||||
not param._partial_kwarg):
|
||||
new_params.pop(arg_name)
|
||||
|
||||
return sig.replace(parameters=new_params.values())
|
||||
|
@ -193,11 +193,11 @@ class _ParameterKind(int):
|
|||
return '<_ParameterKind: {0!r}>'.format(self._name)
|
||||
|
||||
|
||||
_POSITIONAL_ONLY = _ParameterKind(0, name='POSITIONAL_ONLY')
|
||||
_POSITIONAL_OR_KEYWORD = _ParameterKind(1, name='POSITIONAL_OR_KEYWORD')
|
||||
_VAR_POSITIONAL = _ParameterKind(2, name='VAR_POSITIONAL')
|
||||
_KEYWORD_ONLY = _ParameterKind(3, name='KEYWORD_ONLY')
|
||||
_VAR_KEYWORD = _ParameterKind(4, name='VAR_KEYWORD')
|
||||
_POSITIONAL_ONLY = _ParameterKind(0, name='POSITIONAL_ONLY')
|
||||
_POSITIONAL_OR_KEYWORD = _ParameterKind(1, name='POSITIONAL_OR_KEYWORD')
|
||||
_VAR_POSITIONAL = _ParameterKind(2, name='VAR_POSITIONAL')
|
||||
_KEYWORD_ONLY = _ParameterKind(3, name='KEYWORD_ONLY')
|
||||
_VAR_KEYWORD = _ParameterKind(4, name='VAR_KEYWORD')
|
||||
|
||||
|
||||
class Parameter(object):
|
||||
|
@ -220,11 +220,11 @@ class Parameter(object):
|
|||
|
||||
__slots__ = ('_name', '_kind', '_default', '_annotation', '_partial_kwarg')
|
||||
|
||||
POSITIONAL_ONLY = _POSITIONAL_ONLY
|
||||
POSITIONAL_OR_KEYWORD = _POSITIONAL_OR_KEYWORD
|
||||
VAR_POSITIONAL = _VAR_POSITIONAL
|
||||
KEYWORD_ONLY = _KEYWORD_ONLY
|
||||
VAR_KEYWORD = _VAR_KEYWORD
|
||||
POSITIONAL_ONLY = _POSITIONAL_ONLY
|
||||
POSITIONAL_OR_KEYWORD = _POSITIONAL_OR_KEYWORD
|
||||
VAR_POSITIONAL = _VAR_POSITIONAL
|
||||
KEYWORD_ONLY = _KEYWORD_ONLY
|
||||
VAR_KEYWORD = _VAR_KEYWORD
|
||||
|
||||
empty = _empty
|
||||
|
||||
|
@ -366,7 +366,7 @@ class BoundArguments(object):
|
|||
args = []
|
||||
for param_name, param in self._signature.parameters.items():
|
||||
if (param.kind in (_VAR_KEYWORD, _KEYWORD_ONLY) or
|
||||
param._partial_kwarg):
|
||||
param._partial_kwarg):
|
||||
# Keyword arguments mapped by 'functools.partial'
|
||||
# (Parameter._partial_kwarg is True) are mapped
|
||||
# in 'BoundArguments.kwargs', along with VAR_KEYWORD &
|
||||
|
@ -396,7 +396,7 @@ class BoundArguments(object):
|
|||
for param_name, param in self._signature.parameters.items():
|
||||
if not kwargs_started:
|
||||
if (param.kind in (_VAR_KEYWORD, _KEYWORD_ONLY) or
|
||||
param._partial_kwarg):
|
||||
param._partial_kwarg):
|
||||
kwargs_started = True
|
||||
else:
|
||||
if param_name not in self.arguments:
|
||||
|
@ -494,7 +494,7 @@ class Signature(object):
|
|||
params[name] = param
|
||||
else:
|
||||
params = OrderedDict(((param.name, param)
|
||||
for param in parameters))
|
||||
for param in parameters))
|
||||
|
||||
self._parameters = params
|
||||
self._return_annotation = return_annotation
|
||||
|
@ -604,8 +604,8 @@ class Signature(object):
|
|||
|
||||
def __eq__(self, other):
|
||||
if (not issubclass(type(other), Signature) or
|
||||
self.return_annotation != other.return_annotation or
|
||||
len(self.parameters) != len(other.parameters)):
|
||||
self.return_annotation != other.return_annotation or
|
||||
len(self.parameters) != len(other.parameters)):
|
||||
return False
|
||||
|
||||
other_positions = dict((param, idx)
|
||||
|
@ -627,7 +627,7 @@ class Signature(object):
|
|||
return False
|
||||
else:
|
||||
if (idx != other_idx or
|
||||
param != other.parameters[param_name]):
|
||||
param != other.parameters[param_name]):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
@ -680,7 +680,7 @@ class Signature(object):
|
|||
parameters_ex = (param,)
|
||||
break
|
||||
elif (param.kind == _VAR_KEYWORD or
|
||||
param.default is not _empty):
|
||||
param.default is not _empty):
|
||||
# That's fine too - we have a default value for this
|
||||
# parameter. So, lets start parsing `kwargs`, starting
|
||||
# with the current parameter
|
||||
|
@ -730,7 +730,7 @@ class Signature(object):
|
|||
# Signature object (but let's have this check here
|
||||
# to ensure correct behaviour just in case)
|
||||
raise TypeError('{arg!r} parameter is positional only, '
|
||||
'but was passed as a keyword'. \
|
||||
'but was passed as a keyword'.
|
||||
format(arg=param.name))
|
||||
|
||||
if param.kind == _VAR_KEYWORD:
|
||||
|
@ -747,8 +747,8 @@ class Signature(object):
|
|||
# parameter, left alone by the processing of positional
|
||||
# arguments.
|
||||
if (not partial and param.kind != _VAR_POSITIONAL and
|
||||
param.default is _empty):
|
||||
raise TypeError('{arg!r} parameter lacking default value'. \
|
||||
param.default is _empty):
|
||||
raise TypeError('{arg!r} parameter lacking default value'.
|
||||
format(arg=param_name))
|
||||
|
||||
else:
|
||||
|
|
|
@ -54,6 +54,7 @@ photo_data = {
|
|||
class RootQuery(ObjectType):
|
||||
node = CustomNode.Field()
|
||||
|
||||
|
||||
schema = Schema(query=RootQuery, types=[User, Photo])
|
||||
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ class CustomType(BaseType):
|
|||
def test_basetype():
|
||||
class MyBaseType(CustomType):
|
||||
pass
|
||||
|
||||
|
||||
assert isinstance(MyBaseType._meta, CustomOptions)
|
||||
assert MyBaseType._meta.name == "MyBaseType"
|
||||
assert MyBaseType._meta.description is None
|
||||
|
|
|
@ -55,24 +55,27 @@ def test_time_query():
|
|||
assert not result.errors
|
||||
assert result.data == {'time': isoformat}
|
||||
|
||||
|
||||
def test_bad_datetime_query():
|
||||
not_a_date = "Some string that's not a date"
|
||||
|
||||
result = schema.execute('''{ datetime(in: "%s") }''' % not_a_date)
|
||||
|
||||
|
||||
assert len(result.errors) == 1
|
||||
assert isinstance(result.errors[0], GraphQLError)
|
||||
assert result.data == None
|
||||
|
||||
|
||||
def test_bad_date_query():
|
||||
not_a_date = "Some string that's not a date"
|
||||
|
||||
|
||||
result = schema.execute('''{ date(in: "%s") }''' % not_a_date)
|
||||
|
||||
|
||||
assert len(result.errors) == 1
|
||||
assert isinstance(result.errors[0], GraphQLError)
|
||||
assert result.data == None
|
||||
|
||||
|
||||
def test_bad_time_query():
|
||||
not_a_date = "Some string that's not a date"
|
||||
|
||||
|
@ -82,6 +85,7 @@ def test_bad_time_query():
|
|||
assert isinstance(result.errors[0], GraphQLError)
|
||||
assert result.data == None
|
||||
|
||||
|
||||
def test_datetime_query_variable():
|
||||
now = datetime.datetime.now().replace(tzinfo=pytz.utc)
|
||||
isoformat = now.isoformat()
|
||||
|
|
|
@ -10,6 +10,7 @@ class Query(ObjectType):
|
|||
def resolve_json(self, info, input):
|
||||
return input
|
||||
|
||||
|
||||
schema = Schema(query=Query)
|
||||
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ class Query(ObjectType):
|
|||
def resolve_uuid(self, info, input):
|
||||
return input
|
||||
|
||||
|
||||
schema = Schema(query=Query)
|
||||
|
||||
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
import pytest
|
||||
from ..annotate import annotate
|
||||
|
||||
|
||||
def func(a, b, *c, **d):
|
||||
pass
|
||||
|
||||
|
||||
annotations = {
|
||||
'a': int,
|
||||
'b': str,
|
||||
|
@ -11,8 +13,11 @@ annotations = {
|
|||
'd': dict
|
||||
}
|
||||
|
||||
|
||||
def func_with_annotations(a, b, *c, **d):
|
||||
pass
|
||||
|
||||
|
||||
func_with_annotations.__annotations__ = annotations
|
||||
|
||||
|
||||
|
|
|
@ -5,14 +5,14 @@ from ..deprecated import deprecated as deprecated_decorator, warn_deprecation
|
|||
|
||||
def test_warn_deprecation(mocker):
|
||||
mocker.patch.object(deprecated.warnings, 'warn')
|
||||
|
||||
|
||||
warn_deprecation("OH!")
|
||||
deprecated.warnings.warn.assert_called_with('OH!', stacklevel=2, category=DeprecationWarning)
|
||||
|
||||
|
||||
def test_deprecated_decorator(mocker):
|
||||
mocker.patch.object(deprecated, 'warn_deprecation')
|
||||
|
||||
|
||||
@deprecated_decorator
|
||||
def my_func():
|
||||
return True
|
||||
|
@ -24,7 +24,7 @@ def test_deprecated_decorator(mocker):
|
|||
|
||||
def test_deprecated_class(mocker):
|
||||
mocker.patch.object(deprecated, 'warn_deprecation')
|
||||
|
||||
|
||||
@deprecated_decorator
|
||||
class X:
|
||||
pass
|
||||
|
@ -36,7 +36,7 @@ def test_deprecated_class(mocker):
|
|||
|
||||
def test_deprecated_decorator_text(mocker):
|
||||
mocker.patch.object(deprecated, 'warn_deprecation')
|
||||
|
||||
|
||||
@deprecated_decorator("Deprecation text")
|
||||
def my_func():
|
||||
return True
|
||||
|
@ -48,7 +48,7 @@ def test_deprecated_decorator_text(mocker):
|
|||
|
||||
def test_deprecated_class_text(mocker):
|
||||
mocker.patch.object(deprecated, 'warn_deprecation')
|
||||
|
||||
|
||||
@deprecated_decorator("Deprecation text")
|
||||
class X:
|
||||
pass
|
||||
|
@ -60,6 +60,6 @@ def test_deprecated_class_text(mocker):
|
|||
|
||||
def test_deprecated_other_object(mocker):
|
||||
mocker.patch.object(deprecated, 'warn_deprecation')
|
||||
|
||||
|
||||
with pytest.raises(TypeError) as exc_info:
|
||||
deprecated_decorator({})
|
||||
|
|
|
@ -4,6 +4,7 @@ from .. import deprecated
|
|||
|
||||
def test_resolve_only_args(mocker):
|
||||
mocker.patch.object(deprecated, 'warn_deprecation')
|
||||
|
||||
def resolver(root, **args):
|
||||
return root, args
|
||||
|
||||
|
|
11
tox.ini
11
tox.ini
|
@ -1,5 +1,5 @@
|
|||
[tox]
|
||||
envlist = flake8,py27,py33,py34,py35,py36,pypy
|
||||
envlist = flake8,py27,py33,py34,py35,py36,pre-commit,pypy
|
||||
skipsdist = true
|
||||
|
||||
[testenv]
|
||||
|
@ -20,6 +20,15 @@ setenv =
|
|||
commands=
|
||||
py.test
|
||||
|
||||
[testenv:pre-commit]
|
||||
basepython=python3.6
|
||||
deps =
|
||||
pre-commit>0.12.0
|
||||
setenv =
|
||||
LC_CTYPE=en_US.UTF-8
|
||||
commands =
|
||||
pre-commit {posargs:run --all-files}
|
||||
|
||||
[testenv:flake8]
|
||||
deps = flake8
|
||||
commands =
|
||||
|
|
Loading…
Reference in New Issue
Block a user