Hellow everyone,

I'm developing an application for a consulting company. To make a long 
story short, there is some data in the database that is user administered, 
and some formulas to execute with that data. Those formulas should be 
administered by the consultant.
The database data can be easily manageable by the end user in web2py. 
With regard to the formulas, I considered to use some business rules 
engine. Then I realised that python is such a nice programming language 
that who needs a business rules engine? I gave a try to python as a user 
formulas specification.

I tried with a user module file with a function. That function has the 
following parameters:

   - parameteres: where selected data from the database is injected and 
   available to be used in formulas
   - results: another dictionary where the user can store the results back 
   to the calling function. 

This works quite fine. 

Just to give an idea with a simplified sample code:

*controllers/controller.py:*

from gluon.storage import Storage

def calling_function():
    parameters, results = Storage(), Storage()

    parameters=get_data_from_database() 
    # Now we have defined things like:
    # parameters.var1, parameters.var2, ...
    
    from user_module import user_function
      user_function(parameters, results)

    # Now we have in results the key value1 with the resulting value


*modules/user_module.py*

def user_function(p, r):
    # For instance if we want to add two values:
    r.value1=p.var1 + p.var2

    return None



My question is:

I need different versions of the user function and allow the end user to 
edit those functions. This is needed because different organizational 
units(OU) would have different formula definition. 
Those formulas would be edited by a trusted and trained user. Obviously 
there are some risks in allowing the end user to edit  python code. To 
minimize the risk, it is isolated in one module and the call to that user 
function would be controlled by a try: clause.

I considered several alternatives:

   1. Using just one user module and different functions, like 
   user_function1, user_function2, and calling 
   usermodule.user_function1(), user_module.user_function2() from the 
   calling_function depending on the OU related.
   2. Using different user modules with the same user_function. That means 
   calling user_module1.userfunction(), user_module2.userfunction()

Obviously there is a need of creating a kind of scaffolding function 
user_module.user_functionX() to be edited by the user, or an scaffolding 
module user_moduleX with a user_function() to be edited by the user. The 
scaffolding function or module would be created by a controller.

Can you recommend any of those approaches, or a better one?

Thanks in advance.
Best regards


-- 
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