klen / mixer

Mixer -- Is a fixtures replacement. Supported Django, Flask, SqlAlchemy and custom python objects.
Other
939 stars 96 forks source link

Error when using a Marshmallow schema #108

Closed snoepkast closed 3 years ago

snoepkast commented 5 years ago

I get the following error when I want to generate an object using a marshmallow schema:

ValueError: Mixer (<class 'src.users.schemas.UserSchema'>): Generation for OPTIONS_CLASS (UserSchema) has been stopped. Exception: __init__() missing 1 required positional argument: 'meta'

The code is:

from marshmallow import Schema, fields
from mixer.main import mixer

class UserSchema(Schema):
    id = fields.Integer(read_only=True)
    email = fields.String()
    first_name = fields.String()
    last_name = fields.String()

user = mixer.blend(UserSchema)

I saw this issue open, which indicates this is not possible yet. But it is in the docs already here.

Versions:

python==3.7.0
marshmallow==2.16.0
mixer==6.1.3

Full trace:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/mixer/main.py", line 241, in gen_value
    value = fab()
  File "/usr/local/lib/python3.7/site-packages/mixer/main.py", line 134, in blend
    target = self.populate_target(values)
  File "/usr/local/lib/python3.7/site-packages/mixer/main.py", line 157, in populate_target
    target = self.__scheme()
TypeError: __init__() missing 1 required positional argument: 'meta'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/sanic/app.py", line 603, in handle_request
    response = await response
  File "/usr/src/src/users/views.py", line 19, in get
    create_user()
  File "/usr/src/src/users/factories.py", line 7, in create_user
    user = mixer.blend(UserSchema)
  File "/usr/local/lib/python3.7/site-packages/mixer/main.py", line 568, in blend
    return type_mixer.blend(**values)
  File "/usr/local/lib/python3.7/site-packages/mixer/main.py", line 116, in blend
    for name, value in defaults.items()
  File "/usr/local/lib/python3.7/site-packages/mixer/main.py", line 116, in <genexpr>
    for name, value in defaults.items()
  File "/usr/local/lib/python3.7/site-packages/mixer/mix_types.py", line 222, in gen_value
    return type_mixer.gen_field(field)
  File "/usr/local/lib/python3.7/site-packages/mixer/main.py", line 193, in gen_field
    return self.gen_value(field.name, field, unique=unique)
  File "/usr/local/lib/python3.7/site-packages/mixer/main.py", line 247, in gen_value
    field_name, self.__scheme.__name__, exc))
ValueError: Mixer (<class 'src.users.schemas.UserSchema'>): Generation for OPTIONS_CLASS (UserSchema) has been stopped. Exception: __init__() missing 1 required positional argument: 'meta'

Any help would be appreciated!

snoepkast commented 5 years ago

On python 2.7.13 I get a different error:

__init__() takes exactly 2 arguments (1 given)
Traceback (most recent call last):
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 241, in gen_value
    value = fab()
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 134, in blend
    target = self.populate_target(values)
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 157, in populate_target
    target = self.__scheme()
TypeError: __init__() takes exactly 2 arguments (1 given)
Traceback (most recent call last):
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 568, in blend
    return type_mixer.blend(**values)
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 116, in blend
    for name, value in defaults.items()
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 116, in <genexpr>
    for name, value in defaults.items()
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/mix_types.py", line 222, in gen_value
    return type_mixer.gen_field(field)
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 193, in gen_field
    return self.gen_value(field.name, field, unique=unique)
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 247, in gen_value
    field_name, self.__scheme.__name__, exc))
ValueError: Mixer (<class '__main__.UserSchema'>): Generation for OPTIONS_CLASS (UserSchema) has been stopped. Exception: __init__() takes exactly 2 arguments (1 given)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 568, in blend
    return type_mixer.blend(**values)
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 116, in blend
    for name, value in defaults.items()
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 116, in <genexpr>
    for name, value in defaults.items()
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/mix_types.py", line 222, in gen_value
    return type_mixer.gen_field(field)
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 193, in gen_field
    return self.gen_value(field.name, field, unique=unique)
  File "/Users/allard/.virtualenvs/marshmallow-mixer-test/lib/python2.7/site-packages/mixer/main.py", line 247, in gen_value
    field_name, self.__scheme.__name__, exc))
ValueError: Mixer (<class '__main__.UserSchema'>): Generation for OPTIONS_CLASS (UserSchema) has been stopped. Exception: __init__() takes exactly 2 arguments (1 given)
ypa commented 5 years ago

In my case updating the import statement to from mixer.backend.marshmallow import mixer.

ypa commented 5 years ago

^^ that fixes the error in my case.

klen commented 3 years ago

Thank you. Docs were fixed.