There are two types of workflow engines: sequential and finite state machines. The latter is more general and includes the former. In a finite state machine external event let you move through the nodes of a graph. The present node is the state. In workflow.py the creation/update of a file is the external event. The state is also characterized by the files present in the file system. The change of state is associated to the execution of a program. I agree it is a little different than what people are used to and I am not arguing semantics. It was useful to me. Hope it is useful to others. That is all. I will be happy to take patches to improve functionality.
Sorry, if I sounded argumentative. I just shared what somebody's perception could be when they read the title 'Workflow Engine'. It took me a while to understand that probably 'Rules Engine' would have been a better nomenclature.
From my prospective if one likes the web2py libraries, one should use just web2py and not other frameworks. Some web2py users have also complained: what's the point? I think the point is that everybody could learn something from trying to use different tools. I have learned a lot about the other frameworks just trying to implement this. I think others could learn something too from just reading the example code.
> I think the point is that everybody could learn something from trying to use different tools.
Sure. I have used web2py for small projects, and have used Flask and Django heavily. I like Flask because it doesn't try to be everything and allows you to build your application by assembling a set of components. Well, all applications are built that way, but my point is Flask doesn't even try to provide the ORM or templating engine.
What it does is let you to choose your components, and build over the base framework. Also, it comes with a set of recommended components which are wrapped for making it natural for use in Flask.
I have tried almost all python frameworks in some capacity, and Jinja2 is a clear winner for me among all the templating options. It's fast, concise, and doesn't tell me I am an idiot and therefore I am not allowed to have code in my template - it advises against it, yes, but doesn't go out of its way to prevent me from doing it.
Raw sqlalchemy is verbose, but declarative extension solves that issue, and you can always wrap it to make it more natural. Flask-SQLAlchemy integrates nicely with Flask, and you have an option to access sqlalchemy session directly.
Learning something from different tools is good, but ultimately we need to decide upon a set of tools for a given problem.
This is based on a web2py which has a full web based IDE although the web2py web based IDE does not run on GAE because of GAE file system limitation. cube2py has a partial workaround by storing everything in the database. Still before you run it GAE you have to run the code locally to create the indexes.