Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Plone server

1,155 views

Published on

Plone Conference 2016 talk in Boston. Plone server is an experimental server that supports plone.restapi and is based on python 3.5 asyncio

Published in: Software

Plone server

  1. 1. Plone Server Experimental ? Fun !
  2. 2. Ramon Navarro Bosch CATALAN we do things because we don’t know it was impossible CTO iskra.cat CTO intranetum.com FWT plone.org
  3. 3. No FWT opinion
  4. 4. so why ?
  5. 5. Great talks
  6. 6. Plone 2020
  7. 7. Martin DX et al. Really great component design
  8. 8. Timo Quality Plone Rest API
  9. 9. Asko Hero Async + Low level
  10. 10. Nathan 4WD Elastic Search - Front End NG2
  11. 11. Eric Front Front End NG 2
  12. 12. Barcelona SPRINT 2016 15 DEVS on BACK + API + FRONT
  13. 13. THEMING PAS JS/CSS CATALOG DX GENERIC SETUP MULTI LINGUAL LINK INTEGRITY ZOPE2 AC CMF ACQUISIT. ZODB VERSION LOCKING BEHAVIOR Z3CFORM FORMLIB ZPT ZTK CONTENT RULES VIEWLETS PORTLETS WORK FLOWS QUERY STRING REGISTRY TTW RESTRICT PYTHON UPGRADE DISCUSS CONTENT TYPES UUID ITERATE OPENID CACHING PLONE
  14. 14. THEMING PAS JS/CSS CATALOG DX GENERIC SETUP MULTI LINGUAL LINK INTEGRITY ZOPE2 AC CMF ACQUISIT. ZODB VERSION LOCKING BEHAVIOR Z3CFORM FORMLIB ZPT ZTK CONTENT RULES VIEWLETS PORTLETS WORK FLOWS QUERY STRING REGISTRY TTW RESTRICT PYTHON UPGRADE DISCUSS CONTENT TYPES UUID ITERATE OPENID CACHING PLONE
  15. 15. THEMING PAS API JS/CSS CATALOG API DX GENERIC SETUP MULTI LINGUAL LINK INTEGRITY ZOPE2 AC CMF ACQUISIT. ZODB VERSION LOCKING BEHAVIOR Z3CFORM FORMLIB ZPT ZTK CONTENT RULES VIEWLETS PORTLETS WORK FLOWS QUERY STRING REGISTRY TTW RESTRICT PYTHON UPGRADE DISCUSS CONTENT TYPES UUID ITERATE OPENID CACHING TILES MOSAIC REST API PAS PLUGINS CATALOG IMPLEMEN FW API FW API SERVER greatest common divisor CORE frontend PloneCMS TILES
  16. 16. THEMING PAS API JS/CSS CATALOG API DX GENERIC SETUP MULTI LINGUAL LINK INTEGRITY ZOPE2 AC CMF ACQUISIT. ZODB VERSION LOCKING BEHAVIOR Z3CFORM FORMLIB ZPT ZTK CONTENT RULES VIEWLETS PORTLETS WORK FLOWS QUERY STRING REGISTRY TTW RESTRICT PYTHON UPGRADE DISCUSS CONTENT TYPES UUID ITERATE OPENID CACHING TILES MOSAIC REST API PAS PLUGINS CATALOG IMPLEMEN FW API FW API SERVER greatest common divisor CORE frontend PloneCMS TILES
  17. 17. THEMING PAS API JS/CSS CATALOG API DX GENERIC SETUP MULTI LINGUAL LINK INTEGRITY ZOPE2 AC CMF ACQUISIT. ZODB VERSION LOCKING BEHAVIOR Z3CFORM FORMLIB ZPT ZTK CONTENT RULES VIEWLETS PORTLETS WORK FLOWS QUERY STRING REGISTRY TTW RESTRICT PYTHON UPGRADE DISCUSS CONTENT TYPES UUID ITERATE OPENID CACHING TILES MOSAIC REST API PAS PLUGINS CATALOG IMPLEMEN FW API FW API SERVER greatest common divisor CORE frontend PloneCMS TILES
  18. 18. THEMING PAS API JS/CSS CATALOG API DX GENERIC SETUP MULTI LINGUAL LINK INTEGRITY ZOPE2 AC CMF ACQUISIT. ZODB VERSION LOCKING BEHAVIOR Z3CFORM FORMLIB ZPT ZTK CONTENT RULES VIEWLETS PORTLETS WORK FLOWS QUERY STRING REGISTRY TTW RESTRICT PYTHON UPGRADE DISCUSS CONTENT TYPES UUID ITERATE OPENID CACHING TILES MOSAIC REST API PAS PLUGINS CATALOG IMPLEMEN FW API FW API SERVER greatest common divisor CORE frontend PloneCMS TILES
  19. 19. THEMING PAS API JS/CSS CATALOG API DX GENERIC SETUP MULTI LINGUAL LINK INTEGRITY ZOPE2 AC CMF ACQUISIT. ZODB VERSION LOCKING BEHAVIOR Z3CFORM FORMLIB ZPT ZTK CONTENT RULES VIEWLETS PORTLETS WORK FLOWS QUERY STRING REGISTRY TTW RESTRICT PYTHON UPGRADE DISCUSS CONTENT TYPES UUID ITERATE OPENID CACHING TILES MOSAIC REST API PAS PLUGINS CATALOG IMPLEMEN FW API FW API SERVER greatest common divisor CORE frontend PloneCMS TILES
  20. 20. Plone 5 Plone 6 X REST API JS FRONT POSSIBLE FUTURE
  21. 21. we need it at work (intranetum.com) Performance problems on write operations and async integration, lots of docker containers
  22. 22. Collecting all ideas, opinions of paining zope/plone “features” and simplify
  23. 23. Why don’t use all the GOOD parts and ADAPT them to create a REST CMS API FWT for a SIMPLER PLONE backend ? Simploneity
  24. 24. one way to do something
  25. 25. Non Opinionated
  26. 26. ZODB 5 ZEO asyncio ZTK
  27. 27. An async app server that offers a traversable REST API with a ZODB
  28. 28. And we can build a CMS on top of it
  29. 29. Headless CMS • NOT included : The view part! • Included : Strong flexible API • Included : DB/Persistance • Included : CRUD and Management ?
  30. 30. Content Type • NO CMF • zope.container and dx • 1 content rule them all: container (Item)
  31. 31. Definition of content type • Definition of Generic Content types global • Content type defined in code with directives: • catalog/index • read/write • primary
  32. 32. Definition of content type class IDocument(IItem): catalog(title='text') title = schema.TextLine( title=_('Títle'), required=False) <plone:contenttype portal_type="Todo" schema=".todo.ITodo" class=".todo.Todo" behaviors=".todo.IDublinCore" />
  33. 33. plone.jsonserializer • Used on plone.app.mosaic • Need to merge with plone.restapi • Serializes and deserializes DX content and types to JSON
  34. 34. plone.registry • Main/unique configuration place • All persistent info in one place
  35. 35. API DEFINITION • TRAVERSAL -> JSON • FRAMING • Websocket API • PLONE REST API (BASE on plone.server)
  36. 36. API DEFINITION "plone.server.interfaces.IPloneSite": { "endpoints": { "@registry": { "GET": { "factory": "plone.server.api.registry.Read", "permission": "plone.ReadConfiguration" }, "PATCH": { … "DELETE": { "factory": "plone.server.api.portal.DefaultDELETE", "permission": "plone.DeletePortals" }
  37. 37. CORS • Defined by site on registry • One configuration for all the site
  38. 38. Mount DB / Sites • /DB/SITE/FOLDER/OBJ • ZEO / ZODB "databases": [ { "plone": { "storage": "ZODB", "folder": "data" }, "zeo1": { "storage": "ZEO", "address": "127.0.0.1", "port": 8090 } } ],
  39. 39. Traversal • Get the resource • User abstraction • Language negotiation • Check Access permission • View lookup • Traverse view • View security checker • Render lookup / content type negotiation • Transaction View execution • Render execution / Framing • CORS checks/headers
  40. 40. Traversal • READ CALLS • GET • HEAD • OPTIONS • WRITE CALLS • POST • PATCH • PUT • DELETE
  41. 41. Request • site_components (globalSiteManager) • site_settings (plone.registry) • app (rootApp) • site (plone site) • security (authenticated users) • resource (main object) • tail (queue of traversing after main object) • _db_id (id of db) • _site_id (id of site)
  42. 42. Helpers • subrequest : do a real request to API • do_traverse : do a traversal with security
  43. 43. Upload/Download • External BlobStorage with async (buffer and resumable) for upload and download • TUS support for client resumable upload
  44. 44. • Process configuration (APP configuration) in Root Object throw config JSON file (may REST API) • Registry configuration and local components (SITE configuration) throw REST API • Installation addons (old install.py) AddOns and config
  45. 45. Delegate to External • Define the interfaces and allow to have different implementations to get: • Users DB • Catalog
  46. 46. No Acquisition No Attribute Traverse • portal[‘folder1’][‘folder2’][‘item’] NO Generic Setup NO z3cform
  47. 47. Roles • plone.Owner • plone.Editor • plone.Reader • plone.Anonymous • plone.SiteAdmin • plone.SiteDeleter
  48. 48. Permissions • plone.AccessContent • plone.ModifyContent • plone.DeleteContent • plone.AddContent • plone.ViewContent • plone.AccessPreflight • plone.SeePermissions • plone.ChangePermissions • plone.ReindexContent • plone.AddPortal • plone.GetPortals • plone.DeletePortals • plone.MountDatabase • plone.GetDatabases • plone.UmountDatabase • plone.WriteConfiguration • plone.ReadConfiguration • plone.RegisterConfigurations • plone.ManageAddons
  49. 49. Packages • from 93 to 10 plone* • Lines of code (py): • Plone 5 : 881070 • plone* 129185 • P.S. : 222447 • plone* 13955 • plone.server • plone.dexterity • plone.registry • plone.supermodel • plone.uuid • plone.behavior • plone.alterego • plone.rfc822 • plone.jsonserializer • plone.i18n
  50. 50. plone.app.openid plone.app.iterate plone.app.dexterity plone.app.caching Products.CMFPlacefulWorkflow Products.Archetypes zope.testing Products.ATContentTypes plone.app.upgrade ZODB3 Zope2 Products.CMFPlone zope.site zope.publisherzope.processlifetime zope.interface zope.component zope.traversing zope.taleszope.tal zope.structuredtext zope.pagetemplate zope.location zope.i18nmessageidzope.i18n zope.event zope.dottedname zope.deprecation zope.deferredimport zope.container zope.cachedescriptors zope.app.locales z3c.autoinclude transaction plonetheme.barceloneta plone.themeplone.sessionplone.schema plone.registry plone.protectplone.portlets plone.portlet.staticplone.portlet.collection plone.outputfilters plone.memoize plone.locking plone.intelligenttext plone.indexer plone.i18n plone.contentrules plone.browserlayer plone.batching plone.app.workflowplone.app.vocabularies plone.app.viewletmanager plone.app.uuid plone.app.usersplone.app.theming plone.app.registry plone.app.redirector plone.app.portletsplone.app.locales plone.app.linkintegrity plone.app.layout plone.app.multilingualplone.app.i18n plone.app.folderplone.app.discussionplone.app.customerize plone.app.controlpanel plone.app.contenttypes plone.app.contentrulesplone.app.contentmenu plone.app.contentlistingplone.app.content plone.api mockup five.pt five.localsitemanager five.customerize borg.localrole Products.statusmessagesProducts.contentmigration Products.ResourceRegistries Products.PortalTransformsProducts.PluginRegistry Products.PluggableAuthService Products.PlonePAS Products.PlacelessTranslationService Products.PasswordResetTool Products.MimetypesRegistry Products.MimetypesRegistry Products.GenericSetup Products.ExternalEditorProducts.ExtendedPathIndex Products.DCWorkflow Products.CMFUidProducts.CMFQuickInstallerTool Products.CMFEditions Products.CMFDynamicViewFTIProducts.CMFDiffToolProducts.CMFCoreExtensionClass DateTime Acquisition zdaemon ZConfig zc.lockfile Products.StandardCacheManagers Products.PythonScripts Products.MIMEToolsProducts.MailHost Products.ExternalMethodProducts.BTreeFolder2 zope.viewlet zope.testbrowser zope.sizezope.sequencesort zope.sendmail zope.security zope.schemazope.ptresource zope.proxyzope.lifecycleeventzope.exceptions zope.contenttype zope.contentprovider zope.configurationzope.browserresourcezope.browserpagezope.browsermenuzope.browser zLOG zExceptions tempstorage pytz initgroups docutils ZopeUndoRestrictedPython Record Products.ZCTextIndex Products.ZCatalog Products.OFSP PersistenceMultiMapping Missing DocumentTemplate AccessControlProducts.SecureMailHostProducts.CMFFormController zope.ramcache zope.ramcache plone.openid zope.annotation z3c.form plone.z3cform plone.supermodel plone.autoform plone.app.z3cform lxml plone.schemaeditor plone.rfc822 plone.namedfileplone.formwidget.namedfile plone.dexterity plone.behaviorplone.app.textfieldz3c.zcmlhook plone.cachepurging plone.caching Products.validation plone.app.widgets plone.app.collection plone.app.blob plone.uuid plone.folderProducts.ZSQLMethods zope.datetime zope.brokenzope.filerepresentation plone.keyringcollective.monkeypatcher five.globalrequestrepoze.xmliterplone.transformchain six Unidecode zope.componentvocabulary zope.formlib plone.app.imagingplone.app.querystring romanplone.subrequest plone.resourceeditor plone.resource diazoplone.app.relationfield plone.app.intid z3c.relationfieldarchetypes.multilingual plone.app.versioningbehavior plone.app.event plone.stringinterp zope.globalrequest Chameleon z3c.pt Products.ZopeVersionControl zope.copy zope.app.publication plone.scaleplone.synchronize plone.alteregoarchetypes.schemaextender five.intid zope.intid zc.relation z3c.objpath plone.formwidget.recurrence plone.eventProducts.DateRecurringIndex collective.elephantvocabulary zope.error zope.authentication zope.keyreference
  51. 51. plone.app.openid plone.app.iterate plone.app.dexterity plone.app.caching Products.CMFPlacefulWorkflow Products.Archetypes zope.testing Products.ATContentTypes plone.app.upgrade ZODB3 Zope2 Products.CMFPlone zope.site zope.publisherzope.processlifetime zope.interface zope.component zope.traversing zope.taleszope.tal zope.structuredtext zope.pagetemplate zope.location zope.i18nmessageidzope.i18n zope.event zope.dottedname zope.deprecation zope.deferredimportzope.container zope.cachedescriptors zope.app.locales z3c.autoinclude transaction plonetheme.barceloneta plone.theme plone.sessionplone.schema plone.registry plone.protectplone.portlets plone.portlet.staticplone.portlet.collection plone.outputfilters plone.memoize plone.lockingplone.intelligenttext plone.indexer plone.i18n plone.contentrules plone.browserlayer plone.batching plone.app.workflowplone.app.vocabulariesplone.app.viewletmanager plone.app.uuid plone.app.users plone.app.theming plone.app.registry plone.app.redirector plone.app.portletsplone.app.locales plone.app.linkintegrity plone.app.layout plone.app.multilingualplone.app.i18nplone.app.folder plone.app.discussionplone.app.customerize plone.app.controlpanelplone.app.contenttypes plone.app.contentrulesplone.app.contentmenu plone.app.contentlistingplone.app.content plone.api mockup five.pt five.localsitemanager five.customerize borg.localrole Products.statusmessagesProducts.contentmigration Products.ResourceRegistries Products.PortalTransforms Products.PluginRegistry Products.PluggableAuthService Products.PlonePAS Products.PlacelessTranslationService Products.PasswordResetTool Products.MimetypesRegistry Products.MimetypesRegistry Products.GenericSetup Products.ExternalEditor Products.ExtendedPathIndex Products.DCWorkflow Products.CMFUidProducts.CMFQuickInstallerTool Products.CMFEditions Products.CMFDynamicViewFTI Products.CMFDiffTool Products.CMFCore ExtensionClass DateTime Acquisition zdaemon ZConfig zc.lockfile Products.StandardCacheManagers Products.PythonScripts Products.MIMEToolsProducts.MailHost Products.ExternalMethodProducts.BTreeFolder2 zope.viewlet zope.testbrowser zope.size zope.sequencesort zope.sendmail zope.security zope.schema zope.ptresource zope.proxy zope.lifecycleevent zope.exceptions zope.contenttype zope.contentproviderzope.configurationzope.browserresourcezope.browserpagezope.browsermenuzope.browser zLOGzExceptions tempstorage pytzinitgroups docutils ZopeUndo RestrictedPython Record Products.ZCTextIndex Products.ZCatalog Products.OFSPPersistence MultiMapping Missing DocumentTemplateAccessControlProducts.SecureMailHost Products.CMFFormController zope.ramcache zope.ramcache plone.openid zope.annotation z3c.form plone.z3cform plone.supermodel plone.autoform plone.app.z3cform plone.schemaeditor plone.rfc822 plone.namedfile plone.formwidget.namedfile plone.dexterityplone.behavior plone.app.textfield z3c.zcmlhook plone.cachepurging plone.caching Products.validation plone.app.widgets plone.app.collection plone.app.blob plone.uuid plone.folder Products.ZSQLMethods zope.datetime zope.broken zope.filerepresentation plone.keyring collective.monkeypatcher five.globalrequest repoze.xmliter plone.transformchain Unidecode zope.componentvocabulary zope.formlib plone.app.imaging plone.app.querystring plone.subrequest plone.resourceeditor plone.resourcediazoplone.app.relationfield plone.app.intid z3c.relationfield archetypes.multilingual plone.app.lockingbehavior plone.app.versioningbehavior plone.app.event plone.stringinterp zope.globalrequest Chameleon z3c.pt Products.ZopeVersionControl zope.copy zope.app.publication plone.scale plone.synchronize plone.alterego archetypes.schemaextender five.intid zope.intid zc.relation z3c.objpath plone.formwidget.recurrence plone.event Products.DateRecurringIndex collective.elephantvocabularyzope.error zope.authentication zope.keyreference Products.OFSP AccessControl zope.security/securitypolicy plone.server aiohttp/plone.server Products.ExtendedPathIndex Products.ZCTextIndex Products.ZCatalog Products.DateRecurringIndex zope.testing zope.publisher zope.testbrowser plone.app.users DateTime Products.BTreeFolder2 plone.portlets zope.tales ExtensionClass zope.site zope.traversing
  52. 52. plone.app.openid plone.app.iterate plone.app.dexterity plone.app.caching Products.CMFPlacefulWorkflow zope.testing plone.app.upgrade ZODB3 Products.CMFPlone zope.site zope.publisherzope.processlifetime zope.interface zope.component zope.traversing zope.taleszope.tal zope.structuredtext zope.location zope.i18nmessageidzope.i18n zope.event zope.dottedname zope.deprecation zope.deferredimportzope.container zope.cachedescriptors zope.app.locales z3c.autoinclude transaction plone.sessionplone.schema plone.registry plone.protectplone.portlets plone.portlet.static plone.portlet.collection plone.outputfilters plone.memoize plone.lockingplone.intelligenttext plone.indexer plone.i18n plone.contentrules plone.browserlayer plone.batching plone.app.workflow plone.app.vocabularies plone.app.viewletmanager plone.app.uuid plone.app.users plone.app.registry plone.app.redirector plone.app.portlets plone.app.locales plone.app.linkintegrity plone.app.layout plone.app.multilingual plone.app.i18n plone.app.folder plone.app.discussion plone.app.customerize plone.app.controlpanel plone.app.contenttypes plone.app.contentrules plone.app.contentmenu plone.app.contentlisting plone.app.content plone.api mockup borg.localrole Products.statusmessages Products.contentmigration Products.PortalTransforms Products.PluginRegistry Products.PluggableAuthService Products.PlonePAS Products.PlacelessTranslationService Products.PasswordResetTool Products.MimetypesRegistry Products.MimetypesRegistry Products.GenericSetup Products.ExternalEditor Products.ExtendedPathIndex Products.DCWorkflow Products.CMFUid Products.CMFQuickInstallerTool Products.CMFEditions Products.CMFDynamicViewFTI ExtensionClass DateTime zc.lockfile Products.StandardCacheManagers Products.PythonScripts Products.MIMEToolsProducts.MailHost Products.ExternalMethodProducts.BTreeFolder2 zope.testbrowser zope.size zope.sequencesort zope.sendmail zope.security zope.schema zope.ptresource zope.proxyzope.lifecycleevent zope.exceptions zope.contenttype zope.contentprovider zope.configuration zope.browserresource zope.browserpage zope.browser zLOG zExceptionstempstorage docutils ZopeUndoRestrictedPythonRecord Products.ZCTextIndex Products.ZCatalogPersistence MultiMapping Missing DocumentTemplateAccessControlProducts.SecureMailHost zope.ramcache zope.ramcache plone.openid zope.annotation plone.supermodel plone.schemaeditor plone.rfc822 plone.dexterity plone.behavior plone.app.textfield z3c.zcmlhook plone.cachepurging plone.caching Products.validation plone.app.collection plone.app.blobplone.uuid zope.datetimezope.broken zope.filerepresentation plone.keyring collective.monkeypatcher repoze.xmliter plone.transformchain Unidecode zope.componentvocabulary plone.app.imaging plone.app.querystring plone.subrequest plone.resourceeditor plone.resource diazo plone.app.relationfield plone.app.intid z3c.relationfield plone.app.lockingbehavior plone.app.versioningbehavior plone.app.event plone.stringinterp zope.globalrequest Products.ZopeVersionControl zope.copy zope.app.publication plone.scale plone.synchronize plone.alterego zope.intid z3c.objpath plone.event Products.DateRecurringIndex collective.elephantvocabulary zope.error zope.authentication zope.keyreference zope.browsermenu Persistence Products.CMFQuickInstallerTool plone.app.blob plone.server plone.namedfile plone.folder borg.localrole plone.app.uuid plone.app.redirector zope.ptresource plone.app.intid plone.app.i18n Products.CMFPlone plone.browserlayer plone.app.textfield
  53. 53. plone.app.iterate plone.app.caching Products.CMFPlacefulWorkflow plone.app.upgrade ZODB5 zope.processlifetime zope.interface zope.component zope.structuredtext zope.location zope.i18nmessageid zope.i18n zope.dottedname zope.deprecation zope.deferredimport zope.container zope.cachedescriptors zope.app.locales z3c.autoinclude transaction plone.sessionplone.schema plone.registry plone.protect plone.outputfilters plone.memoize plone.locking plone.intelligenttext plone.indexer plone.i18n plone.contentrules plone.batching plone.app.vocabularies plone.app.locales plone.app.layout plone.app.customerize plone.app.contentrules plone.api Products.contentmigration Products.PortalTransforms Products.PluginRegistry Products.PlacelessTranslationService Products.MimetypesRegistry Products.MimetypesRegistry Products.GenericSetup Products.DCWorkflow Products.CMFEditions zc.lockfile Products.StandardCacheManagers Products.PythonScripts Products.MIMETools Products.MailHost Products.ExternalMethod zope.size zope.sequencesort zope.sendmail zope.security zope.schema zope.proxy zope.lifecycleevent zope.exceptions zope.contenttype zope.contentprovider zope.configuration zLOG zExceptions ZopeUndo RestrictedPython Record MultiMapping DocumentTemplateProducts.SecureMailHostzope.ramcache zope.ramcache plone.openid zope.annotation plone.supermodel plone.rfc822 plone.dexterity plone.behavior z3c.zcmlhook plone.cachepurging plone.caching Products.validation plone.uuid zope.datetime zope.broken zope.filerepresentation plone.keyring collective.monkeypatcher plone.transformchain zope.componentvocabulary plone.app.imaging plone.app.querystring plone.resource plone.app.relationfield z3c.relationfield plone.app.lockingbehavior plone.app.versioningbehavior plone.stringinterp Products.ZopeVersionControl zope.copy zope.app.publication plone.scale plone.synchronize plone.alterego zope.intid z3c.objpath collective.elephantvocabulary zope.error zope.authentication zope.keyreference zope.event zdaemon ZConfig persistent zc.relation Products.CMFDiffTool Products.ExternalEditor Products.PasswordResetTool
  54. 54. How transactions work? • 1 connection x thread • locking 1 transaction x request object • for each request cache updated
  55. 55. Async loop • Why you need async ?? • Async Tasks connected to ZODB
  56. 56. Async Queue await getUtility(IQueueUtility).add(viewOperation) Main Thread Transaction Executor Thread Queue Executor Thread Queue Executor Thread Queue Executor Thread ZEO Networking Thread
  57. 57. AioHTTP • FAST • SSL support • Custom router • Websockets support HTTP client/server for asyncio
  58. 58. Gunicorn compatible • WSGI • Workers: gunicorn my_app_module:my_web_app --bind localhost:8080 --worker-class aiohttp.worker.GunicornWebWorker --workers 6 • UVLoop: gunicorn my_app_module:my_web_app --bind localhost:8080 --worker-class aiohttp.worker.GunicornUVLoopWebWorker -- workers 6
  59. 59. Python >= 3.5
  60. 60. Testing • py.test + layers (gocept.pytestlayer) • coverage • Functional to API • WS and API wrappers / helpers
  61. 61. Some addons • users : pserver.oauth • catalog : pserver.elasticsearch • field : pserver.gcloudstorage • cms : pserver.cms
  62. 62. Performance • standalone (12t 100c) = 119% + ràpid • cluster 3 UC • GUnicorn UVLoop + 2 processos plone.server • Mean RO : 170% + ràpid
  63. 63. Performance
  64. 64. Performance
  65. 65. Performance
  66. 66. DEMO • https://github.com/pyrenees/pserver.demo.git • Content Type definition • API definition • Install • Configuration of a site
  67. 67. TODOS • Tests and integration of forked packages (9) • Lots of security audits • Blobs (ZODB implementation) • caching - memoize • Offline Migration • aiohttp.web -> aiohttp.server • user DB / catalog (ZODB implementation) • Join jsonserializer + restapi • plone.api • Workflow • Throw The API customization
  68. 68. Futures • Neo4J backend • GraphQL query interface • Create DB in a ZEO ?
  69. 69. Near future • REST API • PLONE_CLIENT
  70. 70. We are a community! We can have fun! We should be proud!
  71. 71. Who wants this “experiment” is named plone.server ?
  72. 72. Thanks !

×