SahanaCamp NYC Day 3: Eden Technical Workshop

43
1 Sahana Sahana Camp Camp NYC NYC Sahana Eden Technical Workshop Fran Boon [email protected]

description

SahanaCamp NYC Day 3 - Eden Technical Workshop

Transcript of SahanaCamp NYC Day 3: Eden Technical Workshop

Page 1: SahanaCamp NYC Day 3: Eden Technical Workshop

11SahanaSahanaCampCamp NYCNYC

Sahana EdenTechnical Workshop

Fran [email protected]

Page 2: SahanaCamp NYC Day 3: Eden Technical Workshop

22SahanaSahanaCampCamp NYCNYC

AgendaThursday 10 30: Installing a Developer Environment

11 30: Building your own Applications

12 00: Lunch

13 00: Building your own Applications

13 30: Resources

14 00: Building your own Applications

14 30: Modifying existing Applications

15 45: Git and GitHub

16 25: Plan Breakout Sessions

17 00: Adjourn

Page 3: SahanaCamp NYC Day 3: Eden Technical Workshop

33SahanaSahanaCampCamp NYCNYC

AgendaFriday 09 00: Breakout Sessions

10 45: Code Sprint Your Projects: 12 00: Working Lunch

13 00: Next Steps

13 30: Community Resources

14 00: Adjourn

Page 4: SahanaCamp NYC Day 3: Eden Technical Workshop

44SahanaSahanaCampCamp NYCNYC

Building your own Applications

Fran [email protected]

Page 5: SahanaCamp NYC Day 3: Eden Technical Workshop

55SahanaSahanaCampCamp NYCNYC

Whitespace Matters

Unlike other languages which use parentheses to delimit code blocks {...}, Python instead uses White Space

Page 6: SahanaCamp NYC Day 3: Eden Technical Workshop

66SahanaSahanaCampCamp NYCNYC

Debug Mode

models/000_config.py

deployment_settings.base.debug = True

Reloads modules/eden every request CSS & JavaScript unminified

Page 7: SahanaCamp NYC Day 3: Eden Technical Workshop

77SahanaSahanaCampCamp NYCNYC

Training ModuleResource Course: ' ' Name

Date / Time

Location Venue: Facilitator

Welcome Pack

Page 8: SahanaCamp NYC Day 3: Eden Technical Workshop

88SahanaSahanaCampCamp NYCNYC

Define the Basic Data Model

models/training.pytablename = "training_course"db.define_table(tablename, Field("name"), Field("start"), Field("facilitator"), ) Table Name : module resource_ Database migrated automatically' '

Page 9: SahanaCamp NYC Day 3: Eden Technical Workshop

99SahanaSahanaCampCamp NYCNYC

Add a Controller

controllers/training.pydef course(): return s3_rest_controller()

Functions map URLs to code& resources

Page 10: SahanaCamp NYC Day 3: Eden Technical Workshop

1010SahanaSahanaCampCamp NYCNYC

Try it out!http //127.0.0.1 8000/eden/training/course: :

List

Create

Read

Update

Delete

Page 11: SahanaCamp NYC Day 3: Eden Technical Workshop

1111SahanaSahanaCampCamp NYCNYC

Other Formats

http //127.0.0.1 8000/eden/training/course: : .xls

http //127.0.0.1 8000/eden/training/course: : .xml

http //127.0.0.1 8000/eden/training/course: : .json

Page 12: SahanaCamp NYC Day 3: Eden Technical Workshop

1212SahanaSahanaCampCamp NYCNYC

Pivot Table Reports

http //127.0.0.1 8000/eden/training/course: : report/

Page 13: SahanaCamp NYC Day 3: Eden Technical Workshop

1313SahanaSahanaCampCamp NYCNYC

Field Types

models/training.py Field("start", "datetime"), Field("welcome_pack", "upload"),

Page 14: SahanaCamp NYC Day 3: Eden Technical Workshop

1414SahanaSahanaCampCamp NYCNYC

Field Labels

models/training.py Field("start", "datetime", label=T("Start Date")),

Page 15: SahanaCamp NYC Day 3: Eden Technical Workshop

1515SahanaSahanaCampCamp NYCNYC

Links to other Resources

models/training.pytablename = "training_course"db.define_table(tablename, Field("name"), Field("start", "datetime", label = "Start Date"), s3db.pr_person_id(label="Facilitator"), Field("welcome_pack", "upload"), )

Page 16: SahanaCamp NYC Day 3: Eden Technical Workshop

1616SahanaSahanaCampCamp NYCNYC

models/training.pytablename = "training_course"db.define_table(tablename, Field("name"), Field("start", "datetime", label = "Start Date"), s3db.pr_person_id(label="Facilitator"), s3db.super_link("site_id","org_site"), Field("welcome_pack", "upload"), )

Links to other Resources

Page 17: SahanaCamp NYC Day 3: Eden Technical Workshop

1717SahanaSahanaCampCamp NYCNYC

models/training.py

s3db.super_link("site_id", "org_site", label = "Venue", readable = True, writable = True, represent = s3db.org_site_represent, ),

Links to other Resources

Page 18: SahanaCamp NYC Day 3: Eden Technical Workshop

1818SahanaSahanaCampCamp NYCNYC

Menus Top level:models/000_config.pydeployment_settings.modules = OrderedDict([ ("training", Storage( name_nice = "Training", module_type = 1, )),

Page 19: SahanaCamp NYC Day 3: Eden Technical Workshop

1919SahanaSahanaCampCamp NYCNYC

Menus 2nd level:modules/eden/menus.pyclass S3OptionsMenu:

def training(self): return M(c="training")( M("Courses", f="course")( M("New", m="create"), M("List All"), M("Report", m="report"), ) )

Page 20: SahanaCamp NYC Day 3: Eden Technical Workshop

2020SahanaSahanaCampCamp NYCNYC

Module Index Page

http //127.0.0.1 8000/eden/training/index: :

controllers/training.pydef index():

return dict()

Pass control to a view template

Page 21: SahanaCamp NYC Day 3: Eden Technical Workshop

2121SahanaSahanaCampCamp NYCNYC

views/training/index.html{{extend "layout.html"}}<H1>Welcome to the Training Module</H1><UL><LI>Browse the Course List</UL> HTML with Python inside {{..}}

Extend layout.html for basic look and feel

Module Index Page

Page 22: SahanaCamp NYC Day 3: Eden Technical Workshop

2222SahanaSahanaCampCamp NYCNYC

views/training/index.html{{extend "layout.html"}}<H2>Welcome to the Training Module</H2><UL><LI>Browse the {{=A("Course List", _href=URL(c="training", f="course"))}}</UL>

Module Index Page

Page 23: SahanaCamp NYC Day 3: Eden Technical Workshop

2323SahanaSahanaCampCamp NYCNYC

ResourcesDominic Koenig

Page 24: SahanaCamp NYC Day 3: Eden Technical Workshop

2424SahanaSahanaCampCamp NYCNYC

Components

Participants of a Course

Page 25: SahanaCamp NYC Day 3: Eden Technical Workshop

2525SahanaSahanaCampCamp NYCNYC

Components

Participants of a Course

Page 26: SahanaCamp NYC Day 3: Eden Technical Workshop

2626SahanaSahanaCampCamp NYCNYC

Components

models/training.pytablename = "training_participant"db.define_table(tablename, s3db.pr_person_id(), Field("course_id", db.training_course ) )s3db.add_component("training_participant", training_course="course_id")

Page 27: SahanaCamp NYC Day 3: Eden Technical Workshop

2727SahanaSahanaCampCamp NYCNYC

Resource Header

controllers/training.pydef course_rheader(r): if r.record: tabs = [("Basic Details", None), ("Participants", "participant")

] rheader_tabs = s3_rheader_tabs(r, tabs) rheader = DIV(TABLE( TR(TH("Name: "), r.record.name), ), rheader_tabs) return rheader

Page 28: SahanaCamp NYC Day 3: Eden Technical Workshop

2828SahanaSahanaCampCamp NYCNYC

Resource Header

controllers/training.pydef course(): return s3_rest_controller(rheader=course_rheader)

http //127.0.0.1 8000/eden/training/course/1/participant: :

Page 29: SahanaCamp NYC Day 3: Eden Technical Workshop

2929SahanaSahanaCampCamp NYCNYC

Modifying Existing Applications

Fran [email protected]

Page 30: SahanaCamp NYC Day 3: Eden Technical Workshop

3030SahanaSahanaCampCamp NYCNYC

Which file do I edit?Each module will have:

Model : modules/eden/modulename.py View : views/modulename/index.html

There may be additional view files for custom pages

Controller : controllers/modulename.py

Page 31: SahanaCamp NYC Day 3: Eden Technical Workshop

3131SahanaSahanaCampCamp NYCNYC

Web2Py URL Mapping

eg: http://127.0.0.1:8000/eden/default/index

Model : not applicable here View : web2py/applications/eden/views/default/index.html Controller : web2py/applications/eden/controllers/default.py

Function: def index():

http://host/application/controller/function

Page 32: SahanaCamp NYC Day 3: Eden Technical Workshop

3232SahanaSahanaCampCamp NYCNYC

Sahana Eden URL Mapping

eg: http://127.0.0.1:8000/eden/org/site

Model: web2py/applications/eden/modules/eden/org.py tablename = "org_site"

View: not applicable here Controller: web2py/applications/eden/controllers/org.py

Function: def site(): return s3_rest_controller()

http://host/eden/module/resource

Page 33: SahanaCamp NYC Day 3: Eden Technical Workshop

3333SahanaSahanaCampCamp NYCNYC

Views

Generic View:web2py/applications/eden/views/_list_create.html

If you want to create a custom view then:

Custom View: web2py/applications/eden/views/org/site_list_create.html

Page 34: SahanaCamp NYC Day 3: Eden Technical Workshop

3434SahanaSahanaCampCamp NYCNYC

Edit a Field Label

modules/eden/org.pytablename = "org_organisation"... Field("donation_phone", label = T("Donation Phone Number"),

Page 35: SahanaCamp NYC Day 3: Eden Technical Workshop

3535SahanaSahanaCampCamp NYCNYC

Hide a Field

modules/eden/org.pytablename = "org_office"... Field("type", "integer readable=False, writable=False, label=T("Type")),

Page 36: SahanaCamp NYC Day 3: Eden Technical Workshop

3636SahanaSahanaCampCamp NYCNYC

Add a New Field

modules/eden/org.pytablename = "org_organisation"... Field("facebook", label=T("Facebook Page")),

Page 37: SahanaCamp NYC Day 3: Eden Technical Workshop

3737SahanaSahanaCampCamp NYCNYC

Edit the Menus

modules/eden/menus.pydef org(self): """ ORG / Organization Registry """ return M(c="org")( M("Organizations", f="organisation")( M("New", m="create"), M("List All"), M("Search", m="search"), M("Import", m="import") ), M("Venues", f="office")( M("New", m="create"), M("List All"), #M("Search", m="search"), M("Import", m="import") ), )

Page 38: SahanaCamp NYC Day 3: Eden Technical Workshop

3838SahanaSahanaCampCamp NYCNYC

Git and GitHubFran Boon

[email protected]

Page 39: SahanaCamp NYC Day 3: Eden Technical Workshop

3939SahanaSahanaCampCamp NYCNYC

AgendaInstalling Git

Creating your own Branch

Sharing your Code with the Community

Page 40: SahanaCamp NYC Day 3: Eden Technical Workshop

4040SahanaSahanaCampCamp NYCNYC

Installing GitGitHub.com has excellent instructions

Create SSH public/private keysssh-keygen -t rsa -C “[email protected]

Page 41: SahanaCamp NYC Day 3: Eden Technical Workshop

4141SahanaSahanaCampCamp NYCNYC

Creating your Branchhttps //github.com/flavour/eden:

Get local copy : git clone [email protected]:myname/eden.gitStay up date : git pull upstream master

Page 42: SahanaCamp NYC Day 3: Eden Technical Workshop

4242SahanaSahanaCampCamp NYCNYC

Sharing your CodeCommit code locally : git commit -aPush to GitHub : git pushSubmit Pull Request to get code merged into Trunk

Page 43: SahanaCamp NYC Day 3: Eden Technical Workshop

4343SahanaSahanaCampCamp NYCNYC