[openstack-dev] [wsme] Undefined attributes in WSME
Jamie Lennox
jamielennox at redhat.com
Tue Jan 14 02:36:35 UTC 2014
On Mon, 2014-01-13 at 10:05 -0500, Doug Hellmann wrote:
>
>
>
>
> On Sun, Jan 12, 2014 at 6:33 PM, Jamie Lennox <jamielennox at redhat.com>
> wrote:
> On Fri, 2014-01-10 at 10:23 -0500, Doug Hellmann wrote:
> >
> >
> >
> >
> > On Thu, Jan 9, 2014 at 12:02 AM, Jamie Lennox
> <jamielennox at redhat.com>
> > wrote:
> > Is there any way to have WSME pass through arbitrary
> > attributes to the created object? There is nothing
> that i can
> > see in the documentation or code that would seem to
> support
> > this.
> >
> > In keystone we have the situation where arbitrary
> data was
> > able to be attached to our resources. For example
> there are a
> > certain number of predefined attributes for a user
> including
> > name, email but if you want to include an address
> you just add
> > an 'address': 'value' to the resource creation and
> it will be
> > saved and returned to you when you request the
> resource.
> >
> > Ignoring whether this is a good idea or not (it's
> done), is
> > the option there that i missed - or is there any
> plans/way to
> > support something like this?
> >
> >
> > There's a change in WSME trunk (I don't think we've released
> it yet)
> > that allows the schema for a type to be changed after the
> class is
> > defined. There isn't any facility for allowing the caller to
> pass
> > arbitrary data, though. Part of the point of WSME is to
> define the
> > inputs and outputs of the API for validation.
> >
> >
> > How are the arbitrary values being stored in keystone? What
> sorts of
> > things can be done with them? Can an API caller query them,
> for
> > example?
> >
> >
> > Doug
>
>
> So you can't query based on these arbitrary values but they
> are there as
> part of the resource. We have generic middleware that
> interprets the
> incoming json or xml to python dictionaries. Then we extract
> the
> queryable information for storing into database cells. In the
> case of
> User these are: id, name, password, enabled, domain_id,
> default_project_id. Everything else in the dictionary is
> stored in an
> 'extra' column in the database as a JSON dictionary. When we
> reconstruct
> the User object we recreate the extra dictionary and update it
> with the
> known attributes.
>
> So there is no restriction on types or depth of objects, and
> whilst you
> can't query from those attributes they will always be present
> if you get
> or list the user.
>
> Note that User is probably a bad example in this because of
> LDAP and
> other backends but the idea is the same for all keystone
> resources.
>
>
> So I don't think that changing the WSME type after definition
> is useful
> in this case. Is it the sort of thing that would be possible
> or accepted
> to add to WSME?
>
> From the little bit of looking i've done it appears that WSME
> loops over
> the defined attributes of the class and extracts those from
> the message
> rather than looping over keys in the message which makes this
> more
> difficult. Can WSME be made to decode all values in a purely
> python
> primative way (eg don't decode dates, objects etc, just give
> python
> dictionaries like from a json.loads)?
>
>
> WSME asserts that APIs should be well and clearly defined, so that
> callers of the API can understand what they are supposed to (or
> required to) pass in, and what they will receive as a response.
> Accepting arbitrary data goes somewhat against this design goal.
>
>
> I would prefer not to have keystone using yet another
> framework from the
> rest of openstack, but should i just be looking to use
> jsonschema or
> something instead?
>
>
> What requirement(s) led to keystone supporting this feature?
I completely agree with you/WSME that this is a bad situation. I've got
no idea where the requirement came from however it is something that is
supported now and so not something we can back out of.
I don't think WSME should advocate the situation, though it will already
ignore additional attributes i'm wondering what would be involved with
just collecting and stashing those additional attributes?
> Doug
>
>
>
>
> Jamie
>
> >
> >
> >
> > Thanks,
> >
> > Jamie
> >
> > _______________________________________________
> > OpenStack-dev mailing list
> > OpenStack-dev at lists.openstack.org
> >
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> >
> >
> > _______________________________________________
> > OpenStack-dev mailing list
> > OpenStack-dev at lists.openstack.org
> >
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
>
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
More information about the OpenStack-dev
mailing list