thinker
Genro
. . . way of thinking to solve complex problems
. . . superior application framework resulting from this way to think


Application Framework
The application framework we have developed is very broad and very deep, yet has a consistency and power second to none.
The Genro application framework encapsulates and extends the web 2.0 technologies used to create interactive rich internet database applications with a desktop experience. Our leaning is towards open source technologies for a myriad of persuasive reasons, and consequently we use Apache, Python, Dojo javascript libraries, PostgreSQL and additional dependencies. We deploy on either MacOSX or Linux (Ubuntu).

To give a brief example of a tool in genropy, lets take a brief look at the Genro bag:

Genro Bag
The GenroBag is one of the cores of the framework and provides a consistent API for all communications between client and host. It also provides a powerful intelligent container object that simplifies complexities in program design. The genro bag supports a simple dotted path notation to access items that can be themselves nested bags; multiple identical keys; resolvers; triggers; formulas, validations and a lot more. This extremely powerful elegant object provides the basis for the browsers datastore, bilateral communications of data copied between datastore and widgets, triggers for observing any changes in form widget (grids, fields, combo boxes, sliders etc. ie. all interface objects) , or datastore values, and performs appropriate actions. It supports hierachical structures describing web pages, the model, in addition to the data. The bag is supported on both client and server side (javascript and python side). When a page is requested from the client browser, the server first sends the genro engine. This means all pages served look the same if you looked at the page source. Then the server sends the 'main' which is a bag describing the page written in python and translated to xml, to the client. This contains a lot of rpc's that are subsequently executed asynchronously to dynamically build the browser page with data and page description served dynamically.