[openstack-dev] [wsme] Undefined attributes in WSME
Doug Hellmann
doug.hellmann at dreamhost.com
Tue Jan 14 14:09:38 UTC 2014
On Mon, Jan 13, 2014 at 9:36 PM, Jamie Lennox <jamielennox at redhat.com>wrote:
> 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.
>
Why not? Isn't this a backwards incompatible API change already? :-)
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?
>
If it's truly a requirement, we can look into how to make that work. The
data is obviously present in the request, so we would just need to preserve
it.
Doug
>
>
> > 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
>
>
>
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20140114/8278a9cf/attachment.html>
More information about the OpenStack-dev
mailing list