I'm afraid so. / Jakob
2012/10/23 Mykhailo Stadnyk <[email protected]> > How to change the name on pypi? remove/add? > > > 2012/10/23 Jakob Simon-Gaarde <[email protected]> > >> Or the shorter: regd >> >> / Jakob >> >> >> 2012/10/23 Jakob Simon-Gaarde <[email protected]> >> >>> then how about: dregistry >>> >>> >>> 2012/10/23 Mykhailo Stadnyk <[email protected]> >>> >>>> The problem that "dtrace" and "decotrace" names are not free :) >>>> >>>> 2012/10/23 Jakob Simon-Gaarde <[email protected]> >>>> >>>>> Suggestions tracepyd names: dtrace, decotrace anything not containing >>>>> "pyd" :-) >>>>> >>>>> Mike could I ask you to create a fork where you _only_ introduce >>>>> "tracepyd" that shows how it would integrate into Ladon. Also an example >>>>> that shows if the end-user needs to do something special to use more than >>>>> one decorator. >>>>> >>>>> >>>>> / Jakob >>>>> >>>>> 2012/10/22 Mykhailo Stadnyk <[email protected]> >>>>> >>>>>> I'm not very clever to give the names :) Actually tracepyd means "* >>>>>> trace* *py*thon *d*ecorators". Anyway, thanks for your remark, I'll >>>>>> take it into account further >>>>>> >>>>>> >>>>>> 2012/10/22 Jakob Simon-Gaarde <[email protected]> >>>>>> >>>>>>> Just a remark about the package name tracepyd. That might be an >>>>>>> unfortunate package name, cause on that odd platform called Windows >>>>>>> pyd-files are binary python modules. Just a remark :-) >>>>>>> >>>>>>> >>>>>>> 2012/10/22 Jakob Simon-Gaarde <[email protected]> >>>>>>> >>>>>>>> Hi Mike. >>>>>>>> >>>>>>>> Let's talk about tracepyd first, does it solve this bug: >>>>>>>> >>>>>>>> https://bugs.launchpad.net/ladon/+bug/877727 >>>>>>>> >>>>>>>> rpclib has a terribly ugly solution for this, as you can see in the >>>>>>>> bug, and we want to be better than rpclib :-) >>>>>>>> >>>>>>>> / Jakob >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> 2012/10/22 Jakob Simon-Gaarde <[email protected]> >>>>>>>> >>>>>>>>> Hi Mike >>>>>>>>> >>>>>>>>> Looking into this now, you will have my reply today :-) >>>>>>>>> >>>>>>>>> / Jakob >>>>>>>>> >>>>>>>>> >>>>>>>>> 2012/10/22 Mykhailo Stadnyk <[email protected]> >>>>>>>>> >>>>>>>>>> Currently it's an experimental feature which is not ready to be >>>>>>>>>> integrated. I didn't test it at all (keep working on it). >>>>>>>>>> >>>>>>>>>> So here is my personal road-map for this feature: >>>>>>>>>> 1. Resolve problem with decorators dependencies (something I >>>>>>>>>> described in previous message) >>>>>>>>>> 2. Write tests and test the functionality >>>>>>>>>> 3. I've not checked how does it deal with requests containing >>>>>>>>>> multipart boundaries and binary data >>>>>>>>>> 4. Not sure what to do with service description (currently I've >>>>>>>>>> just removed, but have an idea we can use it to describe service any >>>>>>>>>> way, >>>>>>>>>> even as long as REST does not specify this) >>>>>>>>>> 5. Write documentation/examples >>>>>>>>>> >>>>>>>>>> But I'm stuck on issue #1. I want to know: >>>>>>>>>> * do you agree to add dependency in Ladon to tracepyd module or >>>>>>>>>> not? >>>>>>>>>> * If not - do you agree to include tracepyd's implementation >>>>>>>>>> into Ladon (not as dependency, but to place it somewhere in tools)? >>>>>>>>>> * If not - do you agree to modify @ladonize decorator >>>>>>>>>> functionality to add extra-params for REST (for me its ugly). >>>>>>>>>> * If not - which ideas do you have then? :) >>>>>>>>>> >>>>>>>>>> I'd like to suggest to add dependency to tracepyd. Currently I >>>>>>>>>> have a version locally which works fine, so I can publish this >>>>>>>>>> solution to >>>>>>>>>> my branch to let you see. >>>>>>>>>> >>>>>>>>>> Thank you in advance for your time and advice, >>>>>>>>>> Mike >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> 2012/10/22 Jakob Simon-Gaarde <[email protected]> >>>>>>>>>> >>>>>>>>>>> Interesting :-) >>>>>>>>>>> >>>>>>>>>>> I'll look at it later - we must make sure that it doesn't break >>>>>>>>>>> anything. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> 2012/10/22 Mykhailo Stadnyk <[email protected]> >>>>>>>>>>> >>>>>>>>>>>> Hi Jacob. >>>>>>>>>>>> >>>>>>>>>>>> As I told I'm trying to implement RESTful services support by >>>>>>>>>>>> Ladon. The basic functionality is implemented - you can check my >>>>>>>>>>>> branch: >>>>>>>>>>>> lp:~mikhus/ladon/rest<https://code.launchpad.net/~mikhus/ladon/rest> >>>>>>>>>>>> to >>>>>>>>>>>> see how does it work. Here is an example of RESTful service you >>>>>>>>>>>> may run to >>>>>>>>>>>> see: >>>>>>>>>>>> >>>>>>>>>>>> from ladon.ladonizer import ladonize, restfulize >>>>>>>>>>>> from ladon.compat import PORTABLE_STRING >>>>>>>>>>>> from ladon.types.ladontype import LadonType >>>>>>>>>>>> >>>>>>>>>>>> class User(LadonType): >>>>>>>>>>>> name = PORTABLE_STRING >>>>>>>>>>>> email = PORTABLE_STRING >>>>>>>>>>>> passwd = PORTABLE_STRING >>>>>>>>>>>> def __init__(): >>>>>>>>>>>> self.name = "" >>>>>>>>>>>> self.email = "" >>>>>>>>>>>> self.passwd = "" >>>>>>>>>>>> >>>>>>>>>>>> class UserService( object) : >>>>>>>>>>>> @restfulize(method="PUT") >>>>>>>>>>>> @ladonize(str, str, str, rtype=User) >>>>>>>>>>>> def newUser( self, u_name, u_email, u_passwd) : >>>>>>>>>>>> user = User() # where User is LadonType object >>>>>>>>>>>> user.name = u_name >>>>>>>>>>>> user.email = u_email >>>>>>>>>>>> user.passwd = u_passwd >>>>>>>>>>>> return user >>>>>>>>>>>> @restfulize(method="GET") >>>>>>>>>>>> @ladonize(int, rtype=[User]) >>>>>>>>>>>> def getUser(self, u_id) : >>>>>>>>>>>> return User() >>>>>>>>>>>> @restfulize(method="GET") >>>>>>>>>>>> @ladonize(int, rtype=[User]) >>>>>>>>>>>> def getUsers(self) : >>>>>>>>>>>> return [User(), User(), User()] >>>>>>>>>>>> @restfulize(method="POST") >>>>>>>>>>>> @ladonize(int, str, str, str, rtype=User) >>>>>>>>>>>> def updUser( self, u_id, u_name, u_email, u_passwd): >>>>>>>>>>>> user = User() >>>>>>>>>>>> user.name = u_name >>>>>>>>>>>> user.email = u_email >>>>>>>>>>>> user.passwd = u_passwd >>>>>>>>>>>> return user >>>>>>>>>>>> @restfulize(method="DELETE") >>>>>>>>>>>> @ladonize(int, rtype=bool) >>>>>>>>>>>> def delUser( self, u_id) : >>>>>>>>>>>> return True >>>>>>>>>>>> >>>>>>>>>>>> By the way, there is at least one issue I don't know how to >>>>>>>>>>>> solve better, so I want your advice. >>>>>>>>>>>> >>>>>>>>>>>> As you see I've implemented specific decorator to mark service >>>>>>>>>>>> methods as RESTful. It's @restfulize decorator. The problem that >>>>>>>>>>>> it is >>>>>>>>>>>> implemented now as: >>>>>>>>>>>> >>>>>>>>>>>> def restfulize( *dargs, **dkwargs): >>>>>>>>>>>> def decorator(fn): >>>>>>>>>>>> * minfo = fn._ladon_method_info* >>>>>>>>>>>> if 'method' in dkwargs: >>>>>>>>>>>> if not minfo.restfulize( **dkwargs): >>>>>>>>>>>> raise RestfulMethodConfigMismatch( fn.func_name) >>>>>>>>>>>> >>>>>>>>>>>> return fn # returns ladonized method >>>>>>>>>>>> return decorator >>>>>>>>>>>> >>>>>>>>>>>> The problem is highlighted with bold. Will be good to make this >>>>>>>>>>>> decorator independent of what @ladonize defined in it's private >>>>>>>>>>>> props. But, >>>>>>>>>>>> as far as "fn" here is a reference to ladon's "injector" function >>>>>>>>>>>> I have no >>>>>>>>>>>> way to determine correctly which real method in which class is >>>>>>>>>>>> decorated. >>>>>>>>>>>> It means that in such case I have no way to extract LadonMethodInfo >>>>>>>>>>>> associated to "fn" in other way but implemented for the moment. >>>>>>>>>>>> >>>>>>>>>>>> The real problem is when I want to override @ladonize >>>>>>>>>>>> decorator. In this case @resftulize becomes nonoperational because >>>>>>>>>>>> I loose >>>>>>>>>>>> reference to "_ladon_method_info" and means that I should take >>>>>>>>>>>> care to >>>>>>>>>>>> bypass all the existing private properties in 3-d party override >>>>>>>>>>>> implementation, which is not good at all. So I want to have >>>>>>>>>>>> @restfulize and >>>>>>>>>>>> @ladonize implemented without hard dependency between them. >>>>>>>>>>>> Via global_service_collection() it's possible to do but you >>>>>>>>>>>> need to determine real method function in some way. >>>>>>>>>>>> >>>>>>>>>>>> So I see the following ways to fix it: >>>>>>>>>>>> >>>>>>>>>>>> 1. Via decorator registry (Here we solved such kind of problem >>>>>>>>>>>> by creating DecoratorRegistry (I've published it as >>>>>>>>>>>> http://pypi.python.org/pypi/tracepyd)) >>>>>>>>>>>> 2. By adding REST functionality to @ladonize decorator itself, >>>>>>>>>>>> to have something like: >>>>>>>>>>>> @ladonize(PORTABLE_STRING, rtype=[PORTABLE_STRING], *rest={ >>>>>>>>>>>> "method" : "GET", "produces": "XML" }*) >>>>>>>>>>>> >>>>>>>>>>>> Maybe you can point me to some other ideas you know how to >>>>>>>>>>>> resolve such kind of problem. >>>>>>>>>>>> >>>>>>>>>>>> Best regards, >>>>>>>>>>>> Mike >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Med venlig hilsen / Best regards >>>>>>>>>>> Jakob Simon-Gaarde >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Med venlig hilsen / Best regards >>>>>>>>> Jakob Simon-Gaarde >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Med venlig hilsen / Best regards >>>>>>>> Jakob Simon-Gaarde >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Med venlig hilsen / Best regards >>>>>>> Jakob Simon-Gaarde >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Med venlig hilsen / Best regards >>>>> Jakob Simon-Gaarde >>>>> >>>>> -- >>>>> Mailing list: https://launchpad.net/~ladon-dev-team >>>>> Post to : [email protected] >>>>> Unsubscribe : https://launchpad.net/~ladon-dev-team >>>>> More help : https://help.launchpad.net/ListHelp >>>>> >>>>> >>>> >>> >>> >>> -- >>> Med venlig hilsen / Best regards >>> Jakob Simon-Gaarde >>> >> >> >> >> -- >> Med venlig hilsen / Best regards >> Jakob Simon-Gaarde >> >> -- >> Mailing list: https://launchpad.net/~ladon-dev-team >> Post to : [email protected] >> Unsubscribe : https://launchpad.net/~ladon-dev-team >> More help : https://help.launchpad.net/ListHelp >> >> > -- Med venlig hilsen / Best regards Jakob Simon-Gaarde
-- Mailing list: https://launchpad.net/~ladon-dev-team Post to : [email protected] Unsubscribe : https://launchpad.net/~ladon-dev-team More help : https://help.launchpad.net/ListHelp

