[Twisted-web] CorePost - a tiny Flask-style REST microframework for twisted.web

Jacek Furmankiewicz jacek99 at gmail.com
Mon Sep 5 12:41:39 EDT 2011


D'oh.

Finally found how to do it. I can use the decorator to attach additional
route-specific attributes to the function
and then the class instance can scan for it from the constructor,
auto-registering each of its own methods
that have route info attached to them.

Sorry for previous question
Jacek

On Mon, Sep 5, 2011 at 12:14 PM, Jacek Furmankiewicz <jacek99 at gmail.com>wrote:

> Hi Glyph,
>
> I looked at your suggestion, but unfortunately the implementation is very
> complex, if not impossible.
>
> The main problem is that
> a) a class method with a decorator "forgets" its class, so it's impossible
> from the decorator which class it belongs to.
> The function has not been bound to a class yet when the decorator is called
> for the first time, so there is no way for it to notify the containing class
> that this function defines a route for it
>
> b) is is next to impossible for a class to scan its own function and find
> their decorators. I've seen some hacks on StackOverflow
> where it actually parses the source code, but that is an ugly hack to say
> the least (and probably prone to many bugs)
>
> In general, it seems decorators on class methods are missing such crucial
> functionality as finding out which class the method belongs to.
> Sort of a key requirement, if you ask me (at least after lots of experience
> with Java or .Net reflection, where getting this sort of info is trivial).
>
> if you have any suggestions on how to accomplish your recommendation, I
> would greatly appreciate it.
>
> The decorator in question that I would need to take out of the CorePost
> class and make it a standalone function looks like this:
>
>     def
> route(self,url,methods=(Http.GET,),accepts=MediaType.WILDCARD,produces=None,cache=True):
>         """Main decorator for registering REST functions """
>         def wrap(f,*args,**kwargs):
>             self.__registerFunction(f, url, methods, accepts,
> produces,cache)
>             return f
>         return wrap
>
> it's obtaining the reference to 'self' when it is not a class method any
> more is the problem. Not sure how to get around it.
>
> Cheers,
> Jacek
>
> On Sun, Sep 4, 2011 at 12:01 AM, Glyph Lefkowitz <glyph at twistedmatrix.com>wrote:
>
>>
>> On Sep 3, 2011, at 8:28 PM, Jacek Furmankiewicz wrote:
>>
>>  Any feedback is welcome
>>
>>
>> Hi Jacek,
>>
>> Great to see more development going into Twisted-based web stuff! :)
>>
>> However, I do have one question.  Maybe I'm missing something about the
>> way Flask does things, but it seems very odd to me that the decorators
>> you're using are applied to global functions, rather than instances of an
>> object.  For example, instead of:
>>
>> app = CorePost()
>> ...
>> @app.route("/validate/<int:rootId>/schema",Http.POST)
>> @validate(schema=TestSchema)
>> def postValidateSchema(request,rootId,childId,**kwargs):
>>     '''Validate using a common schema'''
>>     return "%s - %s - %s" % (rootId,childId,kwargs)
>>
>>
>> You could do:
>>
>> class MyPost(CorePost):
>>     @route("/validate/<int:rootId>/schema",Http.POST)
>>     @validate(schema=TestSchema)
>>     def postValidateSchema(self,request,rootId,childId,**kwargs):
>>         '''Validate using a common schema'''
>>         return "%s - %s - %s" % (rootId,childId,kwargs)
>>
>>
>> This would allow for re-usable objects; for example, rather than having a
>> "blog article create" API (sorry for the uninspired example, it's late) for
>> your entire site, you would have a "article create" API on a "Blog", which
>> would enable you to have multiple Blog objects (perhaps with different
>> authors, in different permission domains, etc).  This would also make
>> re-using the relevant objects between different applications easier.
>>
>> In other words, global variables are bad, and this looks like it depends
>> rather heavily on them.
>>
>> Any thoughts on this?  Am I missing the point?
>>
>> Thanks,
>>
>> -glyph
>>
>>
>> _______________________________________________
>> Twisted-web mailing list
>> Twisted-web at twistedmatrix.com
>> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-web/attachments/20110905/94453cb2/attachment.htm 


More information about the Twisted-web mailing list