wiki:DeveloperGuidelines/Basics

Version 23 (modified by Fran Boon, 3 weeks ago) ( diff )

Update to point to github.com/sahana & IFRC not IFRCTrain

Developer Guidelines - Basics

Here are some helpful hints to get started developing in Sahana Eden.

Running Sahana Eden

cd .. # the web2py main directory
python web2py.py

Or if you don't want to have to enter a password (or have issues launching the Web2Py GUI).

python web2py.py -a 1234

Wiping the Database

Out of the box Sahana Eden is set to use the SQLite database. If you want to wipe all the data, simply delete the databases/ directory, along with the sessions/ directory (this contains details about your login - which will be invalid as you'll be deleting the user account). The next time you run Sahana Eden, it will recreate the database tables.

Pre-Populating Data

Sahana Eden is able to "Pre-Populate" data so you can explore/test/develop the application with different types of data. Pre-Populate options are associated with the Templates, but they can be set in models/000_config.py.

IFRC is a good set of pre-populate to use (See: https://github.com/sahana/eden/tree/master/modules/templates/IFRC). It also has an admin user account: admin@example.com password: testing. To use it edit models/000_config.py:

After:

# =============================================================================
# Over-rides to the Template may be done here

Add (or un-comment):

settings.base.prepopulate += ("IFRC", "IFRC/Train")

Pre-populate data will only be created if the database is empty, so you may need to wipe the database first. It may take a few minutes to load the data.

Debug Mode

In models/000_config.py uncomment this line:

settings.base.debug = True

to:

  • Use the non-minified CSS & JS
  • See changes in modules/s3db files without restarting Web2Py

Running a Sahana Eden Python Shell

To open a Python Shell in the Sahana Eden Environment, where you can inspect Web2Py and Sahana Eden variables as well as access the data:

cd web2py
python web2py.py -S eden -M

To have database changes be persistent (e.g. to see via Web UI), you will need to commit the transactions: db.commit().

Python

Indentation matters (use 4 spaces instead of Tabs)

Web2Py

This is an MVC environment (like Rails & Django.).

Web2Py can work at several different levels of abstraction.
The Sahana Eden framework (S3) is built on Web2Py's Auth/Crud classes in tools.py (with some remnants of the older T2), however sometimes we need more control therefore need to drop down a level or two.

Can execute a controller to be able to access its functions using:

execfile("applications/eden/controllers/mycontroller.py", globals())

Web2Py can be extended through Plugins & also has a recipes site.

Javascript

  • S3 includes a cross-browser debug utility (only shows up when ?debug=1):
    s3_debug('message', value);
    

All global variables should be in the S3 namespace:

Private variables should be protected, e.g. using the Module Pattern:

Can test out the performance of different options to achieve a task using:

Can check quality using JSLint:

XSLT

To transform XML (and CSV) files for importing and exporting data.

Debugging

Python

HTML, CSS, and Javascript

Each of the major browsers has tools available for viewing HTML page structure and form data, Javascript code, CSS. Some also support Javascript debugging, including setting breakpoints and viewing values in variables.

  • Firefox: Install the Firebug plugin. Start Firebug by clicking the bug icon in the upper right. After the tools open in the lower half of the page, load the page you want to debug.
  • Internet Explorer: Open the IE developer tools with F12, or Tools (gear icon) -> F12 Developer Tools. Note that you can test behavior of pages under earlier versions of IE by setting your current IE to behave as earlier versions. In the developer tools menu bar, click Browser Mode and select the desired version.

Other tools that may be of interest:

Additional Tips

See: DeveloperGuidelines/Tips

Note: See TracWiki for help on using the wiki.