Would be great if it passes pep8 also.(just my nitpicky self) On 4/17/13 6:49 AM, "prasanna" <t...@apache.org> wrote:
>On 17 April 2013 17:10, Prasanna Santhanam <t...@apache.org> wrote: >> On Wed, Apr 17, 2013 at 11:52:08AM +0530, Prasanna Santhanam wrote: >>> On Wed, Apr 17, 2013 at 11:10:01AM +0530, Rohit Yadav wrote: >>> > >>> > >>> > If it does not cost much, let's introduce a new dependency for >>>requesting >>> > stuff (get or post etc.) using "requests" [1] for both marvin and >>> > cloudmonkey. Vijay, you can write your own requester, as it's not >>>much >>> > effort required to implement your own requester once you how >>>signature is >>> > calculated. >>> > >>> > IMO, cloudstackConnection could be rewritten using latest ways and >>>better >>> > libraries as it's not much code and is totally do-able with much less >>> > effort. A lot of flows for auth or non-auth are inter-dependent, the >>> > json->obj and obj->json parts and requesting logic is not straight >>>forward >>> > (each method does *only* one thing). We need to make it generic by >>> > providing both raw and processed outputs, for example the result >>>expects to >>> > return an obj and not json (maybe I need json and not an obj), one >>>reason >>> > why I chose to write my own for cloudmonkey after I tried to reuse >>>it. >>> > Lastly, host marvin on pypi so it's easier for any developer to get >>>it off >>> > the shelf and start hacking some cool clients. >>> > >>> > Cheers. >>> > >>> > [1] http://docs.python-requests.org/en/latest/ >>> > >>> > >>> >>> Yeah - we should simplify cloudstackConnection and make it easily >>> exportable for both cloudmonkey,marvin and any other tools that might >>> require to make connections to CS mgmt. requests certainly looks >>> elegant. I'm trying to experiment with it to see if I can cook up >>> something for marvin. >>> >>> At one point I moved from httplib to urllib2 to overcome an annoying >>> BadStatusLine issue from httplib. I still find it hard to throttle >>> multiple tests through a single connection and urllib3 seems to handle >>> that. requests appears to be based on urllib3. So it would make sense >>> to move to it. >>> >>> The json decode,encode is not done within cloudstackConnection. That >>> part is annoying and I explored json and simplejson and there doesn't >>> seem to be an easy way to accomplish marvin's case. Esp. with nested >>> json objects I find it easier to use a recursive json decoder as in >>> jsonHelper. I've switched to simplejson and find that it performs >>> better for large jsons like our listXxx calls. jsonHelper right now >>> makes plain python objects which can be improved to make it a response >>> object as returned by the API. So a createPhysicalNetworkResponse >>> looks like the physicalNetworkResponse and not a plain python dict. >>> >> >> I refactored the cloudstackconnection and pushed a wip branch >> requestsformarvin. Just need to iron out the POST data passing for >> cmds and the key signing. I think we can add the login mechanism based >> on session-based auth that the UI does with requests as well. That way >> we have a single module for all forms of auth done by CS. >> > >Fixed in master and tested using the bvt. I added some basic support >for being able to handle POST but it's not yet clear to me which of >the APIs will handle POST. May be if API discovery exposes the >mechanism GET/POST for an API we can handle the POST data elegantly >for marvin and cloudmonkey. What say? > >I'm trying to bring in further changes to marvin and add DSL support >after which I'll look into putting it up on pypi. > > >commit 167781ec0184f1332c0b45ca599f460d7d7b5c92 >Author: Prasanna Santhanam <t...@apache.org> >Date: Wed Apr 17 17:06:15 2013 +0530 > > refactor marvin to use requests instead of urllib2 > > Use python-requests [1] for Marvin. Requests enables graceful handling > of http connections. Marvin's cloudstackConnection has been >refactored, > cleaned up to act as a single module for all kinds of cloudstack API > requesting. > > TODO: > 1. session based login mechanism of the UI should work from > cloudstackConnection > 2. cloudmonkey can also reuse /import marvin.cloudstackConnection > 3. More graceful handling of POST requests > > [1] http://docs.python-requests.org/en/latest/ > > Signed-off-by: Prasanna Santhanam <t...@apache.org>