Sahana Eden uses the MVC (Model-View-Controller) design with a WebServices architecture
Sahana Eden is a highly flexible tool which is used in many different scenarios, so there is no single conceptual view. This varies heavily between deployments.
Sahana Eden is designed to be deployed flexibly from lightweight laptop installs to highly-available cloud deployments, so it supports a range of stacks.
|Web Server||Apache||Other web servers can also be used, such as Cherokee.|
|Web Application Framework||Web2Py|
|Programming Language||Python & Java Script|
|Database||MySQL, PostgreSQL, or SQLite||MySQL, PostgreSQL, and SQLite are supported. Other databases should be usable without major additional work since Web2Py supplies many connectors.|
|Operating System||Linux (Debian recommended)||Windows and Mac OS X are possible, but only recommended for developer & single-user environments.|
Being a lightweight system, most Sahana deployments are simple Client-Server:
- A single (usually Virtual) Server contains the 3 tiers of Web, Application & Database
If there is a need to scale beyond this, then the 3 tiers can be separated onto different servers, each of which can be duplicated for performance & redundancy:
Sahana Eden uses the MVC (Model-View-Controller) design
Folder layout is shown here:
Note: Models are actually stored in
modules/s3db to allow conditional loading.
Since Python is an interpreted language, there isn't a need to do builds when editing Python code on a developer machine. There is a 'compile' script for server-based deployments and CSS/JS are minified using their build script:
Compile & Builds are quick (<1 min & <5 mins)
Testing is done using UnitTest, Twill, Selenium and Travis CI:
We don't maintain ER diagrams for the whole system as it would be too large to be meaningful. Instead we recommend building your own for the relevant modules for your deployment using one of these tools:
- MySQL Workbench
- dbwrench (for PostgreSQL)
In order to allow extensibility of the core schema, many resources have key/value 'tag' tables associated with them.
This allows supporting many different coding schemes at the same time and could allow interop with triple-store databases via RDF.