Why is Bondi different?Bondi is not a web framework. It is written out of frustration at the myopia of other framework projects.
In contrast to the main python framework contenders:
The Utopian ideal is to produce a compiler for a DSL that expresses the domain model and logic and the framework does the rest.
Cross-cutting concernsSome concerns to be provided by the framework across all pertinent models:
Auto-saving forms (drafts) Concurrency control (object locks) Transactions Auditing Asynchronous actions Undo Implementation notesGiven a set of domain models, one defines the interactions on them as a set of Screens, Forms and Actions.
Screen: read-only view, with links to other models Form: allows updating the fields on a model Action: perform some arbitrary action on the domain model. These are the controllers, and they each take as a parameter the appropriate Factory to load a model. Additionally, an Action controller needs to know which method to call on the object.
So, consider the proverbial CRUD actions, and call them View, Create, Update and Delete.
View is a Screen(Model.load) Create is a Form(Model.create) Update is a Form(Model.load) Delete is an Action(Model.load, 'delete') These are the controller primitives, from which we can build other interesting actions:
Login: Form(Session.create) Logout: Action(Session.load, 'delete') Clone: Screen(clone_factory) Notify: Action(load_factory, 'notify')