sahanacamp nyc day 3: eden technical workshop
DESCRIPTION
SahanaCamp NYC Day 3 - Eden Technical WorkshopTRANSCRIPT
![Page 2: SahanaCamp NYC Day 3: Eden Technical Workshop](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/3.jpg)
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 5: SahanaCamp NYC Day 3: Eden Technical Workshop](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/7.jpg)
77SahanaSahanaCampCamp NYCNYC
Training ModuleResource Course: ' ' Name
Date / Time
Location Venue: Facilitator
Welcome Pack
![Page 8: SahanaCamp NYC Day 3: Eden Technical Workshop](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/12.jpg)
1212SahanaSahanaCampCamp NYCNYC
Pivot Table Reports
http //127.0.0.1 8000/eden/training/course: : report/
![Page 13: SahanaCamp NYC Day 3: Eden Technical Workshop](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/13.jpg)
1313SahanaSahanaCampCamp NYCNYC
Field Types
models/training.py Field("start", "datetime"), Field("welcome_pack", "upload"),
![Page 14: SahanaCamp NYC Day 3: Eden Technical Workshop](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/14.jpg)
1414SahanaSahanaCampCamp NYCNYC
Field Labels
models/training.py Field("start", "datetime", label=T("Start Date")),
![Page 15: SahanaCamp NYC Day 3: Eden Technical Workshop](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/23.jpg)
2323SahanaSahanaCampCamp NYCNYC
ResourcesDominic Koenig
![Page 24: SahanaCamp NYC Day 3: Eden Technical Workshop](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/24.jpg)
2424SahanaSahanaCampCamp NYCNYC
Components
Participants of a Course
![Page 25: SahanaCamp NYC Day 3: Eden Technical Workshop](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/25.jpg)
2525SahanaSahanaCampCamp NYCNYC
Components
Participants of a Course
![Page 26: SahanaCamp NYC Day 3: Eden Technical Workshop](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/28.jpg)
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 30: SahanaCamp NYC Day 3: Eden Technical Workshop](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/35.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/36.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/37.jpg)
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 39: SahanaCamp NYC Day 3: Eden Technical Workshop](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/39.jpg)
3939SahanaSahanaCampCamp NYCNYC
AgendaInstalling Git
Creating your own Branch
Sharing your Code with the Community
![Page 40: SahanaCamp NYC Day 3: Eden Technical Workshop](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/40.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/41.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/42.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022060109/55583caed8b42acb078b4c8f/html5/thumbnails/43.jpg)
4343SahanaSahanaCampCamp NYCNYC