On Tuesday, October 20, 2015 at 6:21:08 AM UTC-7, A3 wrote:
>
> Thanks for the detailed explanation. 
>

And, just to play Captain Obvious, you probably don't need that much effort 
if both your functions are in the same .py file.

/dps

 

>
> Op dinsdag 20 oktober 2015 03:11:53 UTC+2 schreef Anthony:
>>
>> If you have the function name, you can do:
>>
>>     if function_name in globals():
>>
>> And if you have the actual function object, you can do:
>>
>>     if function.__name__ in globals():
>>
>> Note, those will yield hits even if there is an object of that name 
>> defined in a model file. If that is a concern, you can diff the globals 
>> before and after executing the controller to get a list of objects 
>> specifically defined in the controller. To do that, at the top of the 
>> controller file (or anywhere before the first component you want to 
>> register):
>>
>> pre_controller_objects = dir()
>>
>> Then at the bottom of the controller (or after the last component):
>>
>> controller_objects = set(dir()) - set(pre_controller_objects)
>>
>> Then, wherever you want to test for the existence of a function:
>>
>>     if function_name in controller_objects:
>>
>> Note, that will identify any objects defined in the controller, even if 
>> they are not functions. If that's a concern, you can further filter 
>> controller_objects to include only function objects.
>>
>> Finally, if you only want to identify specific actions that your have 
>> defined as components, you could use a special prefix/postfix to identify 
>> them, or just manually maintain a list of their names. One other option 
>> would be to create a decorator that registers a component name in a special 
>> object. In a module or model file, or at the top of the controller:
>>
>> class Component(object):
>>     def __init__(self):
>>         self.names = []
>>
>>     def __call__(self, f):
>>         self.names.append(f.__name__)
>>         return f
>>
>> component = Component()
>>
>> Then you would decorate components:
>>
>> @component
>> def component1():
>>     return dict()
>>
>> @component
>> def component2():
>>     return dict()
>>
>> Finally, wherever needed, check for a component as follows:
>>
>>     if 'component1' in component.names:
>>
>> Anthony
>>
>> On Monday, October 19, 2015 at 4:19:30 PM UTC-4, A3 wrote:
>>>
>>>
>>> I want to be able to test if a certain function exists in a controller.
>>> (I am loading a component with help of another)
>>>
>>> controller: 
>>> default.py
>>> def myfunction()
>>>      return
>>>
>>> def mytest()
>>>      if exists(myfunction()):
>>>            do this.  
>>>
>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to