-
-
Notifications
You must be signed in to change notification settings - Fork 389
Open
Description
Reproduce with nix-shell -p python37Packages.hug
or nix-shell -p python38Packages.hug
.
============================= test session starts ==============================
platform linux -- Python 3.8.2, pytest-5.3.5, py-1.8.1, pluggy-0.13.1
rootdir: /build/source, inifile: setup.cfg
collected 474 items / 4 deselected / 470 selected
tests/test_api.py ......... [ 1%]
tests/test_async.py ..... [ 2%]
tests/test_authentication.py ..... [ 4%]
tests/test_context_factory.py ...F.....F.....F.. [ 7%]
tests/test_coroutines.py ..... [ 8%]
tests/test_decorators.py ........................s...................... [ 18%]
............................................ [ 28%]
tests/test_directives.py .............. [ 31%]
tests/test_documentation.py .... [ 32%]
tests/test_exceptions.py . [ 32%]
tests/test_full_request.py . [ 32%]
tests/test_global_context.py . [ 32%]
tests/test_input_format.py ..... [ 33%]
tests/test_interface.py .... [ 34%]
tests/test_introspect.py ....... [ 36%]
tests/test_main.py . [ 36%]
tests/test_middleware.py ... [ 37%]
tests/test_output_format.py ................. [ 40%]
tests/test_redirect.py ...... [ 41%]
tests/test_route.py ................ [ 45%]
tests/test_routing.py .................................................. [ 55%]
........................................................................ [ 71%]
.................................................................. [ 85%]
tests/test_store.py . [ 85%]
tests/test_test.py . [ 85%]
tests/test_this.py . [ 85%]
tests/test_transform.py .... [ 86%]
tests/test_types.py .............................F.F....F [ 94%]
tests/test_use.py ...................... [ 99%]
tests/test_validate.py ... [100%]
=================================== FAILURES ===================================
____________________ TestContextFactoryLocal.test_transform ____________________
self = <Local object at 0x7fffe5822d40>, args = (), kwargs = {}
context = {'test': 'context', 'test_number': 43}, errors = {}
def __call__(self, *args, **kwargs):
context = self.api.context_factory(api=self.api, api_version=self.version, interface=self)
"""Defines how calling the function locally should be handled"""
for _requirement in self.requires:
lacks_requirement = self.check_requirements(context=context)
if lacks_requirement:
self.api.delete_context(context, lacks_requirement=lacks_requirement)
return self.outputs(lacks_requirement) if self.outputs else lacks_requirement
for index, argument in enumerate(args):
kwargs[self.parameters[index]] = argument
if not getattr(self, "skip_directives", False):
for parameter, directive in self.directives.items():
if parameter in kwargs:
continue
arguments = (self.defaults[parameter],) if parameter in self.defaults else ()
kwargs[parameter] = directive(
*arguments,
api=self.api,
api_version=self.version,
interface=self,
context=context
)
if not getattr(self, "skip_validation", False):
errors = self.validate(kwargs, context)
if errors:
errors = {"errors": errors}
if getattr(self, "on_invalid", False):
errors = self.on_invalid(errors)
outputs = getattr(self, "invalid_outputs", self.outputs)
self.api.delete_context(context, errors=errors)
return outputs(errors) if outputs else errors
self._rewrite_params(kwargs)
try:
result = self.interface(**kwargs)
if self.transform:
if hasattr(self.transform, "context"):
self.transform.context = context
> result = self.transform(result)
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/interface.py:436:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <hug.types.MarshmallowReturnSchema object at 0x7fffe57fd280>
value = {'name': 'test'}
def __call__(self, value):
# In marshmallow 2 schemas return tuple (`data`, `errors`) upon loading. They might also raise on invalid data
# if configured so, but will still return a tuple.
# In marshmallow 3 schemas always raise Validation error on load if input data is invalid and a single
# value `data` is returned.
if MARSHMALLOW_MAJOR_VERSION is None or MARSHMALLOW_MAJOR_VERSION == 2:
value, errors = self.schema.dump(value)
else:
errors = {}
try:
> value = self.schema.dump(value)
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/types.py:727:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UserSchema(many=False)>, obj = {'name': 'test'}
def dump(self, obj: typing.Any, *, many: bool = None):
"""Serialize an object to native Python data types according to this
Schema's fields.
:param obj: The object to serialize.
:param many: Whether to serialize `obj` as a collection. If `None`, the value
for `self.many` is used.
:return: A dict of serialized data
:rtype: dict
.. versionadded:: 1.0.0
.. versionchanged:: 3.0.0b7
This method returns the serialized data rather than a ``(data, errors)`` duple.
A :exc:`ValidationError <marshmallow.exceptions.ValidationError>` is raised
if ``obj`` is invalid.
.. versionchanged:: 3.0.0rc9
Validation no longer occurs upon serialization.
"""
many = self.many if many is None else bool(many)
if many and is_iterable_but_not_string(obj):
obj = list(obj)
if self._has_processors(PRE_DUMP):
processed_obj = self._invoke_dump_processors(
PRE_DUMP, obj, many=many, original_data=obj
)
else:
processed_obj = obj
result = self._serialize(processed_obj, many=many)
if self._has_processors(POST_DUMP):
> result = self._invoke_dump_processors(
POST_DUMP, result, many=many, original_data=obj
)
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/schema.py:556:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UserSchema(many=False)>, tag = 'post_dump', data = {'name': 'test'}
def _invoke_dump_processors(
self, tag: str, data, *, many: bool, original_data=None
):
# The pass_many post-dump processors may do things like add an envelope, so
# invoke those after invoking the non-pass_many processors which will expect
# to get a list of items.
> data = self._invoke_processors(
tag, pass_many=False, data=data, many=many, original_data=original_data
)
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/schema.py:1053:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UserSchema(many=False)>, tag = 'post_dump', pass_many = False
data = {'name': 'test'}, many = False, original_data = {'name': 'test'}
kwargs = {}, key = ('post_dump', False), attr_name = 'check_context'
processor_kwargs = {'pass_original': False}
def _invoke_processors(
self,
tag: str,
*,
pass_many: bool,
data,
many: bool,
original_data=None,
**kwargs
):
key = (tag, pass_many)
for attr_name in self._hooks[key]:
# This will be a bound method.
processor = getattr(self, attr_name)
processor_kwargs = processor.__marshmallow_hook__[key]
pass_original = processor_kwargs.get("pass_original", False)
if many and not pass_many:
if pass_original:
data = [
processor(item, original, many=many, **kwargs)
for item, original in zip(data, original_data)
]
else:
data = [processor(item, many=many, **kwargs) for item in data]
else:
if pass_original:
data = processor(data, original_data, many=many, **kwargs)
else:
> data = processor(data, many=many, **kwargs)
E TypeError: check_context() got an unexpected keyword argument 'many'
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/schema.py:1212: TypeError
During handling of the above exception, another exception occurred:
self = <tests.test_context_factory.TestContextFactoryLocal object at 0x7fffe5e725b0>
def test_transform(self):
custom_context = dict(test="context", test_number=43)
@hug.context_factory()
def return_context(**kwargs):
return custom_context
@hug.delete_context()
def delete_context(context, exception=None, errors=None, lacks_requirement=None):
assert context == custom_context
assert not exception
assert not errors
assert not lacks_requirement
custom_context["launched_delete_context"] = True
class UserSchema(Schema):
name = fields.Str()
@post_dump()
def check_context(self, data):
assert self.context["test"] == "context"
self.context["test_number"] += 1
@hug.local()
def validation_local_function() -> UserSchema():
return {"name": "test"}
> validation_local_function()
tests/test_context_factory.py:139:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/interface.py:439: in __call__
self.api.delete_context(context, exception=exception)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
context = {'test': 'context', 'test_number': 43}
exception = TypeError("check_context() got an unexpected keyword argument 'many'")
errors = None, lacks_requirement = None
@hug.delete_context()
def delete_context(context, exception=None, errors=None, lacks_requirement=None):
assert context == custom_context
> assert not exception
E assert not TypeError("check_context() got an unexpected keyword argument 'many'")
tests/test_context_factory.py:122: AssertionError
_____________________ TestContextFactoryCLI.test_transform _____________________
self = <tests.test_context_factory.TestContextFactoryCLI object at 0x7fffe5f6a4c0>
def test_transform(self):
custom_context = dict(test="context", test_number=43)
@hug.context_factory()
def return_context(**kwargs):
return custom_context
@hug.delete_context()
def delete_context(context, exception=None, errors=None, lacks_requirement=None):
assert not exception
assert context == custom_context
assert not errors
assert not lacks_requirement
custom_context["launched_delete_context"] = True
class UserSchema(Schema):
name = fields.Str()
@post_dump()
def check_context(self, data):
assert self.context["test"] == "context"
self.context["test_number"] += 1
@hug.cli()
def transform_cli_function() -> UserSchema():
custom_context["launched_cli_function"] = True
return {"name": "test"}
hug.test.cli(transform_cli_function)
assert "launched_cli_function" in custom_context
> assert "launched_delete_context" in custom_context
E AssertionError: assert 'launched_delete_context' in {'launched_cli_function': True, 'test': 'context', 'test_number': 43}
tests/test_context_factory.py:318: AssertionError
____________________ TestContextFactoryHTTP.test_transform _____________________
self = <hug.interface.HTTP object at 0x7fffe5fae890>
request = <Request: GET 'http://falconframework.org/validation_function'>
response = <Response: 200 OK>, api_version = None, kwargs = {}
context = {'launched_local_function': True, 'test': 'context', 'test_number': 43}
exception_types = (), input_parameters = {}, lacks_requirement = None
errors = {}
def __call__(self, request, response, api_version=None, **kwargs):
context = self.api.context_factory(
response=response,
request=request,
api=self.api,
api_version=api_version,
interface=self,
)
"""Call the wrapped function over HTTP pulling information as needed"""
if isinstance(api_version, str) and api_version.isdigit():
api_version = int(api_version)
else:
api_version = None
if not self.catch_exceptions:
exception_types = ()
else:
exception_types = self.api.http.exception_handlers(api_version)
exception_types = tuple(exception_types.keys()) if exception_types else ()
input_parameters = {}
try:
self.set_response_defaults(response, request)
lacks_requirement = self.check_requirements(request, response, context)
if lacks_requirement:
response.data = self.outputs(
lacks_requirement,
**self._arguments(self._params_for_outputs, request, response)
)
self.api.delete_context(context, lacks_requirement=lacks_requirement)
return
input_parameters = self.gather_parameters(
request, response, context, api_version, **kwargs
)
errors = self.validate(input_parameters, context)
if errors:
self.api.delete_context(context, errors=errors)
return self.render_errors(errors, request, response)
> self.render_content(
self.call_function(input_parameters), context, request, response, **kwargs
)
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/interface.py:916:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <hug.interface.HTTP object at 0x7fffe5fae890>, content = None
context = {'launched_local_function': True, 'test': 'context', 'test_number': 43}
request = <Request: GET 'http://falconframework.org/validation_function'>
response = <Response: 200 OK>, kwargs = {}
def render_content(self, content, context, request, response, **kwargs):
if hasattr(content, "interface") and (
content.interface is True or hasattr(content.interface, "http")
):
if content.interface is True:
content(request, response, api_version=None, **kwargs)
else:
content.interface.http(request, response, api_version=None, **kwargs)
return
> content = self.transform_data(content, request, response, context)
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/interface.py:851:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <hug.interface.HTTP object at 0x7fffe5fae890>, data = None
request = <Request: GET 'http://falconframework.org/validation_function'>
response = <Response: 200 OK>
context = {'launched_local_function': True, 'test': 'context', 'test_number': 43}
def transform_data(self, data, request=None, response=None, context=None):
transform = self.transform
if hasattr(transform, "context"):
self.transform.context = context
"""Runs the transforms specified on this endpoint with the provided data, returning the data modified"""
if transform and not (isinstance(transform, type) and isinstance(data, transform)):
if self._params_for_transform:
return transform(
data, **self._arguments(self._params_for_transform, request, response)
)
else:
> return transform(data)
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/interface.py:778:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <hug.types.MarshmallowReturnSchema object at 0x7fffe5db2a80>
value = None
def __call__(self, value):
# In marshmallow 2 schemas return tuple (`data`, `errors`) upon loading. They might also raise on invalid data
# if configured so, but will still return a tuple.
# In marshmallow 3 schemas always raise Validation error on load if input data is invalid and a single
# value `data` is returned.
if MARSHMALLOW_MAJOR_VERSION is None or MARSHMALLOW_MAJOR_VERSION == 2:
value, errors = self.schema.dump(value)
else:
errors = {}
try:
> value = self.schema.dump(value)
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/types.py:727:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UserSchema(many=False)>, obj = None
def dump(self, obj: typing.Any, *, many: bool = None):
"""Serialize an object to native Python data types according to this
Schema's fields.
:param obj: The object to serialize.
:param many: Whether to serialize `obj` as a collection. If `None`, the value
for `self.many` is used.
:return: A dict of serialized data
:rtype: dict
.. versionadded:: 1.0.0
.. versionchanged:: 3.0.0b7
This method returns the serialized data rather than a ``(data, errors)`` duple.
A :exc:`ValidationError <marshmallow.exceptions.ValidationError>` is raised
if ``obj`` is invalid.
.. versionchanged:: 3.0.0rc9
Validation no longer occurs upon serialization.
"""
many = self.many if many is None else bool(many)
if many and is_iterable_but_not_string(obj):
obj = list(obj)
if self._has_processors(PRE_DUMP):
processed_obj = self._invoke_dump_processors(
PRE_DUMP, obj, many=many, original_data=obj
)
else:
processed_obj = obj
result = self._serialize(processed_obj, many=many)
if self._has_processors(POST_DUMP):
> result = self._invoke_dump_processors(
POST_DUMP, result, many=many, original_data=obj
)
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/schema.py:556:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UserSchema(many=False)>, tag = 'post_dump', data = {}
def _invoke_dump_processors(
self, tag: str, data, *, many: bool, original_data=None
):
# The pass_many post-dump processors may do things like add an envelope, so
# invoke those after invoking the non-pass_many processors which will expect
# to get a list of items.
> data = self._invoke_processors(
tag, pass_many=False, data=data, many=many, original_data=original_data
)
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/schema.py:1053:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UserSchema(many=False)>, tag = 'post_dump', pass_many = False, data = {}
many = False, original_data = None, kwargs = {}, key = ('post_dump', False)
attr_name = 'check_context', processor_kwargs = {'pass_original': False}
def _invoke_processors(
self,
tag: str,
*,
pass_many: bool,
data,
many: bool,
original_data=None,
**kwargs
):
key = (tag, pass_many)
for attr_name in self._hooks[key]:
# This will be a bound method.
processor = getattr(self, attr_name)
processor_kwargs = processor.__marshmallow_hook__[key]
pass_original = processor_kwargs.get("pass_original", False)
if many and not pass_many:
if pass_original:
data = [
processor(item, original, many=many, **kwargs)
for item, original in zip(data, original_data)
]
else:
data = [processor(item, many=many, **kwargs) for item in data]
else:
if pass_original:
data = processor(data, original_data, many=many, **kwargs)
else:
> data = processor(data, many=many, **kwargs)
E TypeError: check_context() got an unexpected keyword argument 'many'
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/schema.py:1212: TypeError
During handling of the above exception, another exception occurred:
self = <tests.test_context_factory.TestContextFactoryHTTP object at 0x7fffe5e546d0>
def test_transform(self):
custom_context = dict(test="context", test_number=43)
@hug.context_factory()
def return_context(**kwargs):
return custom_context
@hug.delete_context()
def delete_context(context, exception=None, errors=None, lacks_requirement=None):
assert context == custom_context
assert not exception
assert not errors
assert not lacks_requirement
custom_context["launched_delete_context"] = True
class UserSchema(Schema):
name = fields.Str()
@post_dump()
def check_context(self, data):
assert self.context["test"] == "context"
self.context["test_number"] += 1
@hug.get("/validation_function")
def validation_http_function() -> UserSchema():
custom_context["launched_local_function"] = True
> hug.test.get(module, "/validation_function", 43)
tests/test_context_factory.py:490:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/test.py:81: in call
result = api(
/nix/store/j7k4y6z6xrdlfl5nk6n05sb0ypjb1lql-python3.8-falcon-2.0.0/lib/python3.8/site-packages/falcon/api.py:269: in __call__
responder(req, resp, **params)
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/interface.py:945: in __call__
self.api.delete_context(context, exception=exception)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
context = {'launched_local_function': True, 'test': 'context', 'test_number': 43}
exception = TypeError("check_context() got an unexpected keyword argument 'many'")
errors = None, lacks_requirement = None
@hug.delete_context()
def delete_context(context, exception=None, errors=None, lacks_requirement=None):
assert context == custom_context
> assert not exception
E assert not TypeError("check_context() got an unexpected keyword argument 'many'")
tests/test_context_factory.py:473: AssertionError
___________________________ test_marshmallow_schema ____________________________
def test_marshmallow_schema():
"""Test hug's marshmallow schema support"""
class UserSchema(Schema):
name = fields.Int()
schema_type = hug.types.MarshmallowInputSchema(UserSchema())
assert schema_type({"name": 23}, {}) == {"name": 23}
assert schema_type("""{"name": 23}""", {}) == {"name": 23}
assert schema_type.__doc__ == "UserSchema"
with pytest.raises(InvalidTypeData):
schema_type({"name": "test"}, {})
schema_type = hug.types.MarshmallowReturnSchema(UserSchema())
assert schema_type({"name": 23}) == {"name": 23}
assert schema_type.__doc__ == "UserSchema"
with pytest.raises(InvalidTypeData):
> schema_type({"name": "test"})
tests/test_types.py:400:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/types.py:727: in __call__
value = self.schema.dump(value)
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/schema.py:553: in dump
result = self._serialize(processed_obj, many=many)
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/schema.py:517: in _serialize
value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute)
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/fields.py:325: in serialize
return self._serialize(value, attr, obj, **kwargs)
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/fields.py:916: in _serialize
ret = self._format_num(value) # type: _T
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <fields.Integer(default=<marshmallow.missing>, attribute=None, validate=None, required=False, load_only=False, dump_on...be null.', 'validator_failed': 'Invalid value.', 'invalid': 'Not a valid integer.', 'too_large': 'Number too large.'})>
value = 'test'
def _format_num(self, value) -> typing.Any:
"""Return the number value for value, given this field's `num_type`."""
> return self.num_type(value)
E ValueError: invalid literal for int() with base 10: 'test'
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/fields.py:891: ValueError
_______________________ test_marshmallow_custom_context ________________________
def test_marshmallow_custom_context():
custom_context = dict(context="global", factory=0, delete=0, marshmallow=0)
@hug.context_factory(apply_globally=True)
def create_context(*args, **kwargs):
custom_context["factory"] += 1
return custom_context
@hug.delete_context(apply_globally=True)
def delete_context(context, *args, **kwargs):
assert context == custom_context
custom_context["delete"] += 1
class MarshmallowContextSchema(Schema):
name = fields.String()
@validates_schema
def check_context(self, data):
assert self.context == custom_context
self.context["marshmallow"] += 1
@hug.get()
def made_up_hello(test: MarshmallowContextSchema()):
return "hi"
> assert hug.test.get(api, "/made_up_hello", {"test": {"name": "test"}}).data == "hi"
E assert {'errors': {'test': "__call__() missing 1 required positional argument: 'context'"}} == 'hi'
E + where {'errors': {'test': "__call__() missing 1 required positional argument: 'context'"}} = <falcon.testing.srmock.StartResponseMock object at 0x7fffe5627c10>.data
E + where <falcon.testing.srmock.StartResponseMock object at 0x7fffe5627c10> = functools.partial(<function call at 0x7fffe69f3280>, 'GET')(<hug.api.API object at 0x7fffe6053c10>, '/made_up_hello', {'test': {'name': 'test'}})
E + where functools.partial(<function call at 0x7fffe69f3280>, 'GET') = <module 'hug.test' from '/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/test.py'>.get
E + where <module 'hug.test' from '/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/test.py'> = hug.test
tests/test_types.py:475: AssertionError
____________________ test_validate_route_args_negative_case ____________________
def test_validate_route_args_negative_case():
@hug.get("/hello", raise_on_invalid=True, args={"foo": fields.Integer()})
def hello(foo: int):
return str(foo)
with pytest.raises(ValidationError):
hug.test.get(api, "/hello", **{"foo": "a"})
class TestSchema(Schema):
bar = fields.Integer()
@hug.get("/foo", raise_on_invalid=True, args={"return": TestSchema()})
def foo():
return {"bar": "a"}
with pytest.raises(InvalidTypeData):
> hug.test.get(api, "/foo")
tests/test_types.py:828:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/test.py:81: in call
result = api(
/nix/store/j7k4y6z6xrdlfl5nk6n05sb0ypjb1lql-python3.8-falcon-2.0.0/lib/python3.8/site-packages/falcon/api.py:269: in __call__
responder(req, resp, **params)
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/interface.py:946: in __call__
raise exception
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/interface.py:916: in __call__
self.render_content(
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/interface.py:851: in render_content
content = self.transform_data(content, request, response, context)
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/interface.py:778: in transform_data
return transform(data)
/nix/store/sbm03ivynvxfnbbm7rkqdxcyxdhqcdg1-python3.8-hug-2.6.0/lib/python3.8/site-packages/hug/types.py:727: in __call__
value = self.schema.dump(value)
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/schema.py:553: in dump
result = self._serialize(processed_obj, many=many)
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/schema.py:517: in _serialize
value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute)
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/fields.py:325: in serialize
return self._serialize(value, attr, obj, **kwargs)
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/fields.py:916: in _serialize
ret = self._format_num(value) # type: _T
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <fields.Integer(default=<marshmallow.missing>, attribute=None, validate=None, required=False, load_only=False, dump_on...be null.', 'validator_failed': 'Invalid value.', 'invalid': 'Not a valid integer.', 'too_large': 'Number too large.'})>
value = 'a'
def _format_num(self, value) -> typing.Any:
"""Return the number value for value, given this field's `num_type`."""
> return self.num_type(value)
E ValueError: invalid literal for int() with base 10: 'a'
/nix/store/k9q33lax3gqnj0jnibq3xnk573mbl526-python3.8-marshmallow-3.3.0/lib/python3.8/site-packages/marshmallow/fields.py:891: ValueError
=============================== warnings summary ===============================
/nix/store/q5wyf15ymsq73ny992c3aiy5fh0qsbdl-python3.8-pytest-5.3.5/lib/python3.8/site-packages/_pytest/mark/structures.py:323
/nix/store/q5wyf15ymsq73ny992c3aiy5fh0qsbdl-python3.8-pytest-5.3.5/lib/python3.8/site-packages/_pytest/mark/structures.py:323: PytestUnknownMarkWarning: Unknown pytest.mark.extnetwork - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/latest/mark.html
warnings.warn(
tests/test_coroutines.py::test_basic_call_coroutine
/build/source/tests/test_coroutines.py:35: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
def hello_world():
tests/test_coroutines.py::test_nested_basic_call_coroutine
/build/source/tests/test_coroutines.py:46: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
def hello_world():
tests/test_coroutines.py::test_nested_basic_call_coroutine
/build/source/tests/test_coroutines.py:51: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
def nested_hello_world():
tests/test_coroutines.py::test_basic_call_on_method_coroutine
/build/source/tests/test_coroutines.py:63: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
def hello_world(self=None):
tests/test_coroutines.py::test_basic_call_on_method_through_api_instance_coroutine
/build/source/tests/test_coroutines.py:83: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
def hello_world():
tests/test_coroutines.py::test_basic_call_on_method_registering_without_decorator_coroutine
/build/source/tests/test_coroutines.py:98: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
def hello_world_method(self):
tests/test_decorators.py::test_startup
/build/source/tests/test_decorators.py:1589: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
def async_happens_on_startup(api):
-- Docs: https://docs.pytest.org/en/latest/warnings.html
===== 6 failed, 463 passed, 1 skipped, 4 deselected, 8 warnings in 17.69s ======
guzmud and urbas
Metadata
Metadata
Assignees
Labels
No labels