19:01:00 <edleafe> #startmeeting Python OpenStack SDK
19:01:00 <openstack> Meeting started Tue Apr 29 19:01:00 2014 UTC and is due to finish in 60 minutes.  The chair is edleafe. Information about MeetBot at http://wiki.debian.org/MeetBot.
19:01:01 <openstack> Useful Commands: #action #agreed #help #info #idea #link #topic #startvote.
19:01:04 <openstack> The meeting name has been set to 'python_openstack_sdk'
19:01:17 <edleafe> Agenda: https://wiki.openstack.org/wiki/Meetings/PythonOpenStackSDK#Agenda_for_2014-04-29_1900_UTC
19:01:45 <edleafe> #topic Roll Call
19:02:03 <edleafe> If you're here for the Python OpenStack SDK meeting, state your name and affiliation
19:02:28 <Alex_Gaynor> Alex Gaynor, Rackspace
19:02:31 <edleafe> Ed Leafe, Rackspace
19:02:47 <Alex_Gaynor> briancurtinmobil: Why are you at a gas station?
19:02:57 <wchrisj__> Chris Johnson, HP
19:03:52 <jamielennox> Jamie Lennox, Red Hat
19:04:12 <briancurtinmobil> I'm stuck on my phone, in route to San Antonio...was hoping to be there by now. weather hasn't cooperated
19:04:34 <edleafe> #topic Open Discussion
19:04:55 <edleafe> I didn't know of any particular issues that need to be discussed, so does anyone want to open one up?
19:06:32 <edleafe> <crickets>
19:06:47 <briancurtinmobil> thank you to whoever is running this, my connecting flight is boarding soon. sorry about this.
19:07:27 <Alex_Gaynor> Anyone have any topics they want to discuss today, or do we just need to do more reviews?
19:07:31 <edleafe> see you in sa, briancurtinmobil
19:07:42 <jamielennox> review.openstack.org gives 503 :(
19:07:52 <bknudson> jamielennox: restart your browser
19:07:56 <bknudson> same thing happened to me
19:08:04 <edleafe> yeah, mine's working now
19:08:16 <edleafe> it's due to the Gerrit upgrade
19:08:35 <jamielennox> ah, ok
19:09:11 <jamielennox> so i thought we should possibly discuss the presentation layer patch: https://review.openstack.org/#/c/90538/
19:09:22 <jamielennox> that seems the next big thing
19:10:19 <jamielennox> in general i think it's ok to use it for now. The only issue i see is that it means a user of resources would need to pass a Json layer rather than a session
19:10:36 <jamielennox> if you look at mixing in XML or others there i don't know how that works
19:12:04 <Alex_Gaynor> I'd love it if when we add new layers we could add examples, showing how users are supposed to use teh whole system, not docs per se, just, as we're building up the design, making sure we see what the whole system looks like
19:12:35 <edleafe> Alex_Gaynor: +1
19:12:43 <edleafe> It would help me understand the intent
19:13:12 <edleafe> I.e., how would this impact what a developer using the SDK would need to do
19:16:33 <terrylhowe> edleafe, sorry I'm late, what was the context of this discusion?
19:17:12 <edleafe> terrylhowe: The presentation layer patch
19:17:24 <Alex_Gaynor> terrylhowe: """ I'd love it if when we add new layers we could add examples, showing how users are supposed to use teh whole system, not docs per se, just, as we're building up the design, making sure we see what the whole system looks like"""
19:17:35 <Alex_Gaynor> I should have added at the end "from a user's perspective"
19:18:39 <terrylhowe> Yeh, I like what dtroyer did with example code, but some of these classes may be kind of internal
19:18:52 <terrylhowe> maybe in the commit?
19:19:32 <terrylhowe> I was thinking vaguely there would be some factory type class on top of this where you would request a connection and it would give you the appropriate presentation layer
19:20:17 <Alex_Gaynor> If the answer is "a user never see's this" I think that's enough
19:20:54 <jamielennox> i think most of what we are doing at this level would be available to user's wanting to do API version specific tasks - but not part of the general API
19:21:16 <jamielennox> s/general API/general library usage
19:21:49 <terrylhowe> yes, so maybe not in the example code
19:22:31 <terrylhowe> in the presentation patch, it integrates itself with the resource class.  I can't think of any more layers in there, so I think that is "done"
19:26:13 <jamielennox> so is there a rule as to what __init__ should do on a Resource?
19:26:37 <jamielennox> how do we distinguish between something a user wants to create and something that exists and is being loaded?
19:33:35 <wchrisj__> give me an example jaimelennox
19:34:00 <terrylhowe> something other than loaded=False?
19:34:08 <wchrisj__> jamielennox (sorry) ^^
19:35:05 <jamielennox> so taking the User example, if we do __init__(self, **kwargs) what do the kwargs mean in terms of attributes?
19:36:21 <jamielennox> do we just do a .update() with the underlying dictionary?
19:37:02 <jamielennox> or do we do something more user centric and specify the available kwargs
19:37:49 <edleafe> jamielennox: I thought we had decided that **kwargs and dynamically-created attributes were "bad things" for Resources
19:37:49 <jamielennox> __init__(self, name) and if you want to add something to the object that we don't handle explicitly you do user['address'] = 'xxx' post __init__
19:39:09 <terrylhowe> seems like __init__ would need to handle things the class does not know
19:39:37 <terrylhowe> In case the SDK was out of sync with the server
19:40:16 <jamielennox> edleafe: yea, i think that it will be a problem - but in looking at the Resource Properties patch of mine, if name = prop('userName') then what is the kwarg?
19:40:35 <jamielennox> name or userName
19:40:55 <jamielennox> name makes more sense for the user, userName is what will be available from the create function
19:41:23 <edleafe> I think calling the name of a user 'userName' is redundant
19:41:32 <jamielennox> edleafe: ++
19:41:34 <edleafe> (and non-pythonic)
19:41:52 <edleafe> well, at least non-pep8-ish
19:42:17 <jamielennox> it's a contrived example too, i can't remember what is set by the keystone server
19:42:47 <jamielennox> but i needed an example where the object attribute wasn't the same as the attribute in the API
19:42:47 <edleafe> I also think that it makes for a better experience if Resources across services have common properties with the same attribute name
19:42:58 <edleafe> E.g., "name", "id"
19:44:03 <jamielennox> so do we simply ban Resources having __init__ arguments altogether? and then have factory functions?
19:44:29 <edleafe> jamielennox: the Rackspace identity stuff is filled with things like 'apiKey' instead of 'api_key'. I translate those in my SDK so that the user can expect a consistent naming even when the services are inconsistent
19:45:33 <jamielennox> edleafe: ++, yep that's what i was looking for with prop() - and easy to see what's supported as well
19:47:29 <terrylhowe> I need to mess with an actual implementation of a resource to get a real feel for it.
19:49:49 <jamielennox> terrylhowe: yea, i think so
19:50:59 <edleafe> Ten minutes left. Any other topics we need to cover?
19:52:45 <terrylhowe> I was going to take a stab at authorization
19:53:22 <terrylhowe> unless someone else has something going on.  I chatted with Brian about it.
19:53:41 <edleafe> terrylhowe: do you mean parsing the service catalog? Or something else?
19:54:20 <terrylhowe> well, I'm not sure how deep I'll go.  I was just hoping to get a token really
19:54:28 <wchrisj__> Is dtroyer looking into the discovery process/algo? Anyone know?
19:55:03 <terrylhowe> his api discovery stuff must of been abandoned.  I don't see it open
19:55:14 <jamielennox> wchrisj__: i think he was but i haven't heard from him for a while now
19:55:37 <wchrisj__> Was hoping to discuss at the Summit if not before ...
20:00:15 <edleafe> OK, times up! Thanks everyone!
20:00:19 <edleafe> #endmeeting