SlideShare a Scribd company logo
1 of 52
plone.api


Nejc Zupan, NiteoWeb Ltd.
    Plone Conference 2012
Everybody stand up please!
self.context
• 2006

• Student
  workshop

• Plone 2.5

• Life was good!
eestec.net
• Online since 2009

• Switched to Plone 3 during development

• +2500 users

• Several events per month
+2500
 Electrical
Engineering
  Students
no. of new
contributors:
no. of new
contributors:
       2
eestec.net
• Online since 2009

• ***Switched to Plone 3 during development***

• +2500 users

• Several events per month
Plone 3
Impossible to:
 - train
 - write docs for
 - stay productive
 - keep devs happy
Plone 4?
From where to
import that thing?
Many ways to get
the Site root: which
    is correct?
Copy/move objects?
target.manage_pasteObjects(
    source.manage_cutObjects(source_id)
)
Workflow state?
workflow = getToolByName(
  portal,
  'portal_workflow'
)
workflow.getInfoFor(obj, 'review_state')
plone.api
plone.api


• Started at Plone Konf Munich
• Alpha release at Belgian Beer Sprint
• Gaining momentum!
Inspiration

• PEP20
• PEP8
• Pareto Principle
• SQLAlchemy
• Requests
From where to
import that thing?
from plone import api
Many ways to get
the Site root: which
    is correct?
api.portal.get()
Copy/move objects?
target.manage_pasteObjects(
    source.manage_cutObjects(source_id)
)
portal = api.portal.get()
contact = portal['about']['contact']

api.content.move(
    source=contact,
    target=portal,
)
Workflow state?
workflow = getToolByName(
  portal,
  'portal_workflow'
)
workflow.getInfoFor(obj, 'review_state')
api.content.get_state(
  obj=portal['about']
)

api.content.transition(
  obj=portal['about'],
  transition='publish',
)
It’s documented!
It’s documented



• Document first
• Narrative documentation
• Advanced usage documentation
It’s tested!
It’s tested



• ~95% test coverage
• Narrative documentation included
• Continuous Integration
Import and Usage style

from plone import api
portal = api.portal.get()
user = api.user.create(username='bob')
api.content.move(
     source=portal['blog'],
     id='old-blog',
)
api.portal
• get()
• get_navigation_root()
• get_tool()
• get_localized_time()
• send_email()
• show_message()
• get_registry_record()
api.content

• create()         • get_uuid()
• get()            • get_view()
• delete()         • get_state()
• copy()           • transition()
• move()
• rename()
api.user

• create()           • is_anonymous()
• get()              • get_roles()
• get_users()        • get_permissions()
• get_current()      • grant_roles()
• delete()           • revoke_roles()
api.group

• create()         • add_user()
• get()            • remove_user()
• get_groups()     • get_roles()
• delete()         • get_permissions()
                   • grant_roles()
                   • revoke_roles()
In the wild



• tutorial.todoapp
• eestec.portal
• 100k objects / 300 users production site
Where to use plone.api



• Integration code? Yes.
• Add-on code? Likely.
• Core code? No.
Coming up
api.role
with api.role('Manager'):
    # do something bypassing all
    # constraints, permissions, etc.


with api.role('Reviewer'):
    # do something as a reviewer to see
    # if permissions are set correctly
api.env

• api.env.debug_mode()

• api.env.test_mode()

• api.env.plone_version()

• api.env.zope_version()
api.system

• Run upgrades

• Cleanup broken objects, utilities, interfaces ...

• Mount things

• Make sysadmins happy!
JSON WebServices

• Probably packaged as plone.jsonapi

• One-to-one mapping to plone.api methods

• @@jsonapi view

• Standardized JavaScript writing!
Help us!
• Translating documentation into your language

• Multilingual Sphinx on RTD anyone?

• Show us your home-baked maintenance
  scripts

• All this and more, at the post-conference sprint
Post-Conference sprint
• TodoApp coding dojo

• Implement remaining plone.api methods

• Get the test coverage even higher!

• Native speakers’ love to our docs

• Let’s get beta release out there!
Utopia
Thanks!
         Give it a spin!
         propose ideas!
        Join the sprint!


http://github.com/plone/plone.api

More Related Content

What's hot

What you can do In WatiR
What you can do In WatiRWhat you can do In WatiR
What you can do In WatiRWesley Chen
 
Automated Testing With Watir
Automated Testing With WatirAutomated Testing With Watir
Automated Testing With WatirTimothy Fisher
 
Building a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring BootBuilding a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring BootOmri Spector
 
Introduction To Ruby Watir (Web Application Testing In Ruby)
Introduction To Ruby Watir (Web Application Testing In Ruby)Introduction To Ruby Watir (Web Application Testing In Ruby)
Introduction To Ruby Watir (Web Application Testing In Ruby)Mindfire Solutions
 
Building APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformBuilding APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformAntonio Peric-Mazar
 
Riding the Edge with Ember.js
Riding the Edge with Ember.jsRiding the Edge with Ember.js
Riding the Edge with Ember.jsaortbals
 
Scaling up task processing with Celery
Scaling up task processing with CeleryScaling up task processing with Celery
Scaling up task processing with CeleryNicolas Grasset
 
Serverless computing henry been - continuous deployment of azure functions
Serverless computing   henry been - continuous deployment of azure functionsServerless computing   henry been - continuous deployment of azure functions
Serverless computing henry been - continuous deployment of azure functionsHenry Been
 
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...Chef Software, Inc.
 
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...Chef Software, Inc.
 
Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...
Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...
Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...WordCamp Sydney
 
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...Sébastien Levert
 
Chef, Devops, and You
Chef, Devops, and YouChef, Devops, and You
Chef, Devops, and YouBryan Berry
 
Djangocon 2014 angular + django
Djangocon 2014 angular + djangoDjangocon 2014 angular + django
Djangocon 2014 angular + djangoNina Zakharenko
 
Asynchronous Task Queues with Celery
Asynchronous Task Queues with CeleryAsynchronous Task Queues with Celery
Asynchronous Task Queues with CeleryKishor Kumar
 
Best Practices for WordPress
Best Practices for WordPressBest Practices for WordPress
Best Practices for WordPressTaylor Lovett
 
Keyword Driven Framework using WATIR
Keyword Driven Framework using WATIRKeyword Driven Framework using WATIR
Keyword Driven Framework using WATIRNivetha Padmanaban
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to ChefKnoldus Inc.
 
Best Practices for Building WordPress Applications
Best Practices for Building WordPress ApplicationsBest Practices for Building WordPress Applications
Best Practices for Building WordPress ApplicationsTaylor Lovett
 
Actor Clustering with Docker Containers and Akka.Net in F#
Actor Clustering with Docker Containers and Akka.Net in F#Actor Clustering with Docker Containers and Akka.Net in F#
Actor Clustering with Docker Containers and Akka.Net in F#Riccardo Terrell
 

What's hot (20)

What you can do In WatiR
What you can do In WatiRWhat you can do In WatiR
What you can do In WatiR
 
Automated Testing With Watir
Automated Testing With WatirAutomated Testing With Watir
Automated Testing With Watir
 
Building a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring BootBuilding a REST Service in minutes with Spring Boot
Building a REST Service in minutes with Spring Boot
 
Introduction To Ruby Watir (Web Application Testing In Ruby)
Introduction To Ruby Watir (Web Application Testing In Ruby)Introduction To Ruby Watir (Web Application Testing In Ruby)
Introduction To Ruby Watir (Web Application Testing In Ruby)
 
Building APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformBuilding APIs in an easy way using API Platform
Building APIs in an easy way using API Platform
 
Riding the Edge with Ember.js
Riding the Edge with Ember.jsRiding the Edge with Ember.js
Riding the Edge with Ember.js
 
Scaling up task processing with Celery
Scaling up task processing with CeleryScaling up task processing with Celery
Scaling up task processing with Celery
 
Serverless computing henry been - continuous deployment of azure functions
Serverless computing   henry been - continuous deployment of azure functionsServerless computing   henry been - continuous deployment of azure functions
Serverless computing henry been - continuous deployment of azure functions
 
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
 
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
 
Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...
Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...
Stop Hacking WordPress, Start Working with it - Charly Leetham - WordCamp Syd...
 
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...
 
Chef, Devops, and You
Chef, Devops, and YouChef, Devops, and You
Chef, Devops, and You
 
Djangocon 2014 angular + django
Djangocon 2014 angular + djangoDjangocon 2014 angular + django
Djangocon 2014 angular + django
 
Asynchronous Task Queues with Celery
Asynchronous Task Queues with CeleryAsynchronous Task Queues with Celery
Asynchronous Task Queues with Celery
 
Best Practices for WordPress
Best Practices for WordPressBest Practices for WordPress
Best Practices for WordPress
 
Keyword Driven Framework using WATIR
Keyword Driven Framework using WATIRKeyword Driven Framework using WATIR
Keyword Driven Framework using WATIR
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chef
 
Best Practices for Building WordPress Applications
Best Practices for Building WordPress ApplicationsBest Practices for Building WordPress Applications
Best Practices for Building WordPress Applications
 
Actor Clustering with Docker Containers and Akka.Net in F#
Actor Clustering with Docker Containers and Akka.Net in F#Actor Clustering with Docker Containers and Akka.Net in F#
Actor Clustering with Docker Containers and Akka.Net in F#
 

Similar to Plone api

System insight without Interference
System insight without InterferenceSystem insight without Interference
System insight without InterferenceTony Tam
 
Pioneer a Strategic Change in Content Organization with Plone
Pioneer a Strategic Change in Content Organization with PlonePioneer a Strategic Change in Content Organization with Plone
Pioneer a Strategic Change in Content Organization with PloneClayton Parker
 
SharePoint Framework, Angular and Azure Functions
SharePoint Framework, Angular and Azure FunctionsSharePoint Framework, Angular and Azure Functions
SharePoint Framework, Angular and Azure FunctionsSébastien Levert
 
SharePoint Saturday New York 2017 - SharePoint Framework, Angular and Azure F...
SharePoint Saturday New York 2017 - SharePoint Framework, Angular and Azure F...SharePoint Saturday New York 2017 - SharePoint Framework, Angular and Azure F...
SharePoint Saturday New York 2017 - SharePoint Framework, Angular and Azure F...Sébastien Levert
 
SharePoint Fest Seattle - SharePoint Framework, Angular & Azure Functions
SharePoint Fest Seattle - SharePoint Framework, Angular & Azure FunctionsSharePoint Fest Seattle - SharePoint Framework, Angular & Azure Functions
SharePoint Fest Seattle - SharePoint Framework, Angular & Azure FunctionsSébastien Levert
 
Developing Brilliant and Powerful APIs in Ruby & Python
Developing Brilliant and Powerful APIs in Ruby & PythonDeveloping Brilliant and Powerful APIs in Ruby & Python
Developing Brilliant and Powerful APIs in Ruby & PythonSmartBear
 
Django Overview
Django OverviewDjango Overview
Django OverviewBrian Tol
 
Building APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformBuilding APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformAntonio Peric-Mazar
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileAmazon Web Services Japan
 
SharePoint Development 101
SharePoint Development 101SharePoint Development 101
SharePoint Development 101Greg Hurlman
 
Open Source Automation Tools That Really Work V2
Open Source Automation Tools That Really Work V2Open Source Automation Tools That Really Work V2
Open Source Automation Tools That Really Work V2An Doan
 
Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.
Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.
Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.WO Community
 
Testing API's: Tools & Tips & Tricks (Oh My!)
Testing API's: Tools & Tips & Tricks (Oh My!)Testing API's: Tools & Tips & Tricks (Oh My!)
Testing API's: Tools & Tips & Tricks (Oh My!)Ford Prior
 
APIs for modern web apps
APIs for modern web appsAPIs for modern web apps
APIs for modern web appsChris Mills
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Pythongturnquist
 
Stop coding start testing
Stop coding start testingStop coding start testing
Stop coding start testingPascal Dufour
 
Api fundamentals
Api fundamentalsApi fundamentals
Api fundamentalsAgileDenver
 
04 integrate entityframework
04 integrate entityframework04 integrate entityframework
04 integrate entityframeworkErhwen Kuo
 

Similar to Plone api (20)

System insight without Interference
System insight without InterferenceSystem insight without Interference
System insight without Interference
 
CDI In Real Life
CDI In Real LifeCDI In Real Life
CDI In Real Life
 
Pioneer a Strategic Change in Content Organization with Plone
Pioneer a Strategic Change in Content Organization with PlonePioneer a Strategic Change in Content Organization with Plone
Pioneer a Strategic Change in Content Organization with Plone
 
SharePoint Framework, Angular and Azure Functions
SharePoint Framework, Angular and Azure FunctionsSharePoint Framework, Angular and Azure Functions
SharePoint Framework, Angular and Azure Functions
 
SharePoint Saturday New York 2017 - SharePoint Framework, Angular and Azure F...
SharePoint Saturday New York 2017 - SharePoint Framework, Angular and Azure F...SharePoint Saturday New York 2017 - SharePoint Framework, Angular and Azure F...
SharePoint Saturday New York 2017 - SharePoint Framework, Angular and Azure F...
 
SharePoint Fest Seattle - SharePoint Framework, Angular & Azure Functions
SharePoint Fest Seattle - SharePoint Framework, Angular & Azure FunctionsSharePoint Fest Seattle - SharePoint Framework, Angular & Azure Functions
SharePoint Fest Seattle - SharePoint Framework, Angular & Azure Functions
 
Developing Brilliant and Powerful APIs in Ruby & Python
Developing Brilliant and Powerful APIs in Ruby & PythonDeveloping Brilliant and Powerful APIs in Ruby & Python
Developing Brilliant and Powerful APIs in Ruby & Python
 
Django Overview
Django OverviewDjango Overview
Django Overview
 
Building APIs in an easy way using API Platform
Building APIs in an easy way using API PlatformBuilding APIs in an easy way using API Platform
Building APIs in an easy way using API Platform
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
 
SharePoint Development 101
SharePoint Development 101SharePoint Development 101
SharePoint Development 101
 
Open Source Automation Tools That Really Work V2
Open Source Automation Tools That Really Work V2Open Source Automation Tools That Really Work V2
Open Source Automation Tools That Really Work V2
 
Titanium Alloy Tutorial
Titanium Alloy TutorialTitanium Alloy Tutorial
Titanium Alloy Tutorial
 
Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.
Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.
Beyond Fluffy Bunny. How I leveraged WebObjects in my lean startup.
 
Testing API's: Tools & Tips & Tricks (Oh My!)
Testing API's: Tools & Tips & Tricks (Oh My!)Testing API's: Tools & Tips & Tricks (Oh My!)
Testing API's: Tools & Tips & Tricks (Oh My!)
 
APIs for modern web apps
APIs for modern web appsAPIs for modern web apps
APIs for modern web apps
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
 
Stop coding start testing
Stop coding start testingStop coding start testing
Stop coding start testing
 
Api fundamentals
Api fundamentalsApi fundamentals
Api fundamentals
 
04 integrate entityframework
04 integrate entityframework04 integrate entityframework
04 integrate entityframework
 

More from Nejc Zupan

Don't Rely On Discipline
Don't Rely On DisciplineDon't Rely On Discipline
Don't Rely On DisciplineNejc Zupan
 
Building robust REST APIs
Building robust REST APIsBuilding robust REST APIs
Building robust REST APIsNejc Zupan
 
Don't rely on discipline
Don't rely on disciplineDon't rely on discipline
Don't rely on disciplineNejc Zupan
 
Beyond 100% test coverage
Beyond 100% test coverageBeyond 100% test coverage
Beyond 100% test coverageNejc Zupan
 
Pipenv: Python Dev Workflow for Humans
Pipenv: Python Dev Workflow for HumansPipenv: Python Dev Workflow for Humans
Pipenv: Python Dev Workflow for HumansNejc Zupan
 
State of the art image recognition in 7 lines of Python
State of the art image recognition in 7 lines of PythonState of the art image recognition in 7 lines of Python
State of the art image recognition in 7 lines of PythonNejc Zupan
 
State Of The Art Image Recognition In 7 Lines Of Python
State Of The Art Image Recognition In 7 Lines Of PythonState Of The Art Image Recognition In 7 Lines Of Python
State Of The Art Image Recognition In 7 Lines Of PythonNejc Zupan
 
Bootstrapping Your Python Career
Bootstrapping Your Python CareerBootstrapping Your Python Career
Bootstrapping Your Python CareerNejc Zupan
 
Turbo boosting your python development
Turbo boosting your python developmentTurbo boosting your python development
Turbo boosting your python developmentNejc Zupan
 
Travis CI: Fun and easy CI for your Plone packages
Travis CI: Fun and easy CI for your Plone packagesTravis CI: Fun and easy CI for your Plone packages
Travis CI: Fun and easy CI for your Plone packagesNejc Zupan
 

More from Nejc Zupan (10)

Don't Rely On Discipline
Don't Rely On DisciplineDon't Rely On Discipline
Don't Rely On Discipline
 
Building robust REST APIs
Building robust REST APIsBuilding robust REST APIs
Building robust REST APIs
 
Don't rely on discipline
Don't rely on disciplineDon't rely on discipline
Don't rely on discipline
 
Beyond 100% test coverage
Beyond 100% test coverageBeyond 100% test coverage
Beyond 100% test coverage
 
Pipenv: Python Dev Workflow for Humans
Pipenv: Python Dev Workflow for HumansPipenv: Python Dev Workflow for Humans
Pipenv: Python Dev Workflow for Humans
 
State of the art image recognition in 7 lines of Python
State of the art image recognition in 7 lines of PythonState of the art image recognition in 7 lines of Python
State of the art image recognition in 7 lines of Python
 
State Of The Art Image Recognition In 7 Lines Of Python
State Of The Art Image Recognition In 7 Lines Of PythonState Of The Art Image Recognition In 7 Lines Of Python
State Of The Art Image Recognition In 7 Lines Of Python
 
Bootstrapping Your Python Career
Bootstrapping Your Python CareerBootstrapping Your Python Career
Bootstrapping Your Python Career
 
Turbo boosting your python development
Turbo boosting your python developmentTurbo boosting your python development
Turbo boosting your python development
 
Travis CI: Fun and easy CI for your Plone packages
Travis CI: Fun and easy CI for your Plone packagesTravis CI: Fun and easy CI for your Plone packages
Travis CI: Fun and easy CI for your Plone packages
 

Recently uploaded

What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 

Recently uploaded (20)

What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 

Plone api

Editor's Notes

  1. \n
  2. - non-coders sit down\n- from where to import getToolByName\n- get site root\n- copy content object\n
  3. Hi, I’m Nejc and this is a story about how Plone development went to a dark place ... and what we are doing to bring it back!\n
  4. \n
  5. we were building a portal for a student organization\n
  6. The workshop was organized by EESTEC.\nEESTEC = electrical engineering students in 53 universities,\nAll event applications go through eestec.net, a Plone portal.\nMultiple events per year, more than 2000 users\n
  7. More than 25 hundred EE students using Plone, many of them programmers.\n\n
  8. Out of that 25 hundred potential Plonistas how many did we manage to keep in the eestec.net development team?\n\n\n
  9. Two. Less than 0.1 percent of potential pool of students and 50+ of them attending week-long eestec.net development workshops. \n\n
  10. Main reason? This thing.\n
  11. Plone 3, for us, made it:\n
  12. Now, Plone 4 did make *a lot* of things easier. But numerous problems still persist:\n
  13. All the time you need to search for where does that one thing import from\n
  14. There are many ways to achieve tasks: how to know which is correct?\n
  15. Manipulating objects is not trivial, you need to search for code.\n
  16. Let’s look at workflow states: you *have* to Google for snippets.\n\nThe list goes on an on.\n
  17. This is BAD. This is why we couldn’t keep developers in. This is why our documentation is hard to follow. This is why it’s hard to train.\n
  18. Enter plone.api. An elegant and simple API,\nbuilt for humans wishing to develop with Plone\n
  19. The initiative for having a unified API for common Plone tasks started this year at the Plone Konferenz in Munich\n\n- Antwerp Beer Sprint: teaching students how to develop with Plone -> when stumbled upon a part that was ugly, a team of Ploners made a plone.api method for it\n\n- +15 commiters\n\n
  20. Explicit is better than implicit.\nReadability counts.\nThere should be only one way to do it.\nNow is better than never.\nWe only want to cover the most common tasks and use-cases, not all.\n\n
  21. Looking back to the question of from where to import that thing?\n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. And one of my favorites, as I could *never* remember how to do it.\n
  28. It’s now this simple to do it.\n
  29. \n
  30. Document Driven Development\n- plenty of room for discussion\n- not much to re-program if we fail with the first try\n- a nice looking and usable api because we already used it (in the docs)\n\n(NEXT SLIDE HERE!)\n\n
  31. Plone.api comes with narrative documentation,\nthat guides you through common use-cases of how to use the api.\n\nNarrative documentation means written in a way that guides you through how you can\nuse the API, but does not cover all use-cases, to keep text simple.\n\nHowever, if you click on one of these links, you get to the full-spec advanced documentation\n
  32. Besides that you have the full-specs documentation of every method.\nWith all possible parameters and edge-cases explained.\n\nThe information here is pulled directly from the code, so it is always up-to-date.\n\nIt describes all possible parameters you can pass to a method, its return value, etc.\n\nExample links back to narrative documentation from the previous slide.\n
  33. \n
  34. * high test coverage\n * all code examples in the narrative documentation is also tested so we make sure the examples actually work\n * everytime there is a commit, an online service called Travis CI runs all tests (more about Travis in my talk tomorrow morning)\n
  35. here it is, history of builds and their statuses\n
  36. Methods are grouped by their field of usage:\nPortal, Content, Users and Groups.\n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. Integration: project specific, you know the stakes.\nAdd-on: very likely you may use it, but maybe you’ll have to use some underlying APIs later on to cover edge cases\nCore code: Nope, core code needs to cover *all* possible scenarios.\n
  43. However, our work is far from finished.\nYou can expect the following features in the future:\n
  44. - maintenance tasks and scripts\n- tests!\n
  45. - for debugging addons\n- for tests\n- for code dependant on Plone version\n
  46. \n
  47. Now this is a HUGE one!\n
  48. Sysadmins I’m looking at you!\n
  49. - todo-app coding dojo to go through the tutorial and test it while learning sth. new\n- coding new plone.api methods -- doable by human-only developers\n- increasing test-coverage\n- we need a native english speaker that is a solid in writing to go through our narrative text and give it some love\n
  50. What if someday, plone.api is widely used in most of integration code and add-ons. \nImagine:\n- a non-suicidal learning curve\n- single point of reference for common tasks\n- standardized AJAX/WebServices access\n- upgrades to Plone core code would keep add-ons working!\n
  51. Let’s start living this dream.\n\nCrying over how Plone is getting impossible to work with is not enough.\n\nFight for your rights as a developer. Do something to make your\nday-to-day Plone experience better. Let’s live the utopia.\n\nGive plone.api a spin, report bugs, propose ideas, join our sprint!\n
  52. It’s now up to you, humans using Plone, to\n - try out plone.api\n - shout out what bothers you or what is missing\n - and help with development\n