Hi Jacob, You can check it at https://code.launchpad.net/~mikhus/ladon/regd
I've put an example there in "examples" directory. Kind regards, Mike 2012/10/23 Jakob Simon-Gaarde <[email protected]> > Will you make a fork as I proposed? > > > 2012/10/23 Mykhailo Stadnyk <[email protected]> > >> Renamed to RegD :) >> >> http://packages.python.org/regd/ >> https://github.com/Mikhus/regd >> >> I'll build an example you've requested and put it to separate branch in >> few hours >> >> >> 2012/10/23 Jakob Simon-Gaarde <[email protected]> >> >>> 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 >>> >>> >> > > > -- > 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 > >
-- 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

