excellent explanation did not know anything about it thank Russ :)
On Fri, Jan 25, 2013 at 9:08 AM, Russell Keith-Magee < russ...@keith-magee.com> wrote: > > > On Fri, Jan 25, 2013 at 10:36 PM, Tundebabzy <tundeba...@gmail.com> wrote: > >> I'll be really grateful if someone can take the time to explain these >> lines of code. Its from contrib.admin.options >> >> def wrap(view): >> def wrapper(*args, **kwargs): >> return self.admin_site.admin_view(view)(*args, >> **kwargs) # This is the brain twisting line >> return update_wrapper(wrapper, view) >> >> The syntax foo.bar()(*osama **obama) is just blowing fuses in my brain >> and then from the code above, I can't even find where admin_view is defined. >> >> > Admin is really composed of two types of object -- an Admin Site object, > and a collection of ModelAdmin objects. The AdminSite object governs the > access to the admin site; a ModelAdmin object exists for each model > registered with the admin. As a result of that relationship, every > ModelAdmin object also knows the site that it is a part of. > > So - if you're in contrib.admin.options, you're looking at the code for > the ModelAdmin object. self.admin_site refers to the site that the > ModelAdmin instance belongs to; the admin_view method belongs to that site > object. It's essentially a decorator providing the permissions check for > the current user. > > A decorator is just a function that takes a function as an argument, and > returns a function as a result. Since it returns a function, the return > value can itself be invoked. > > So: > > self.admin_site > > is the admin site. > > self.admin_site.admin_view > > is a decorator method. > > self.admin_site.admin_view(my_view) > > is the application of the decorator applied to a specific view > > self.admin_site.admin_view(my_view)(*args, **kwargs) > > is the invocation of the decoration result using the given args and kwargs. > > Yours, > Russ Magee %-) > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-users@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com. > Visit this group at http://groups.google.com/group/django-users?hl=en. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. Visit this group at http://groups.google.com/group/django-users?hl=en. For more options, visit https://groups.google.com/groups/opt_out.