sahanacamp nyc day 3: eden technical workshop
Post on 17-May-2015
1.397 Views
Preview:
DESCRIPTION
TRANSCRIPT
11SahanaSahanaCampCamp NYCNYC
Sahana EdenTechnical Workshop
Fran Boonfran@sahanafoundation.org
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
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
44SahanaSahanaCampCamp NYCNYC
Building your own Applications
Fran Boonfran@sahanafoundation.org
55SahanaSahanaCampCamp NYCNYC
Whitespace Matters
Unlike other languages which use parentheses to delimit code blocks {...}, Python instead uses White Space
66SahanaSahanaCampCamp NYCNYC
Debug Mode
models/000_config.py
deployment_settings.base.debug = True
Reloads modules/eden every request CSS & JavaScript unminified
77SahanaSahanaCampCamp NYCNYC
Training ModuleResource Course: ' ' Name
Date / Time
Location Venue: Facilitator
Welcome Pack
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' '
99SahanaSahanaCampCamp NYCNYC
Add a Controller
controllers/training.pydef course(): return s3_rest_controller()
Functions map URLs to code& resources
1010SahanaSahanaCampCamp NYCNYC
Try it out!http //127.0.0.1 8000/eden/training/course: :
List
Create
Read
Update
Delete
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
1212SahanaSahanaCampCamp NYCNYC
Pivot Table Reports
http //127.0.0.1 8000/eden/training/course: : report/
1313SahanaSahanaCampCamp NYCNYC
Field Types
models/training.py Field("start", "datetime"), Field("welcome_pack", "upload"),
1414SahanaSahanaCampCamp NYCNYC
Field Labels
models/training.py Field("start", "datetime", label=T("Start Date")),
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"), )
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
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
1818SahanaSahanaCampCamp NYCNYC
Menus Top level:models/000_config.pydeployment_settings.modules = OrderedDict([ ("training", Storage( name_nice = "Training", module_type = 1, )),
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"), ) )
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
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
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
2323SahanaSahanaCampCamp NYCNYC
ResourcesDominic Koenig
2424SahanaSahanaCampCamp NYCNYC
Components
Participants of a Course
2525SahanaSahanaCampCamp NYCNYC
Components
Participants of a Course
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")
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
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: :
2929SahanaSahanaCampCamp NYCNYC
Modifying Existing Applications
Fran Boonfran@sahanafoundation.org
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
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
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
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
3434SahanaSahanaCampCamp NYCNYC
Edit a Field Label
modules/eden/org.pytablename = "org_organisation"... Field("donation_phone", label = T("Donation Phone Number"),
3535SahanaSahanaCampCamp NYCNYC
Hide a Field
modules/eden/org.pytablename = "org_office"... Field("type", "integer readable=False, writable=False, label=T("Type")),
3636SahanaSahanaCampCamp NYCNYC
Add a New Field
modules/eden/org.pytablename = "org_organisation"... Field("facebook", label=T("Facebook Page")),
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") ), )
3838SahanaSahanaCampCamp NYCNYC
Git and GitHubFran Boon
fran@sahanafoundation.org
3939SahanaSahanaCampCamp NYCNYC
AgendaInstalling Git
Creating your own Branch
Sharing your Code with the Community
4040SahanaSahanaCampCamp NYCNYC
Installing GitGitHub.com has excellent instructions
Create SSH public/private keysssh-keygen -t rsa -C “my_email@email.com”
4141SahanaSahanaCampCamp NYCNYC
Creating your Branchhttps //github.com/flavour/eden:
Get local copy : git clone git@github.com:myname/eden.gitStay up date : git pull upstream master
4242SahanaSahanaCampCamp NYCNYC
Sharing your CodeCommit code locally : git commit -aPush to GitHub : git pushSubmit Pull Request to get code merged into Trunk
4343SahanaSahanaCampCamp NYCNYC
top related