Download - Plone server
Plone ServerExperimental ? Fun !
Ramon Navarro Bosch
CATALAN we do things because we don’t know it
was impossible
CTO iskra.cat CTO intranetum.com
FWT plone.org
No FWT opinion
so why ?
Great talks
Plone 2020
Martin DX et al.Really great component design
Timo QualityPlone Rest API
Asko HeroAsync + Low level
Nathan 4WDElastic Search - Front End NG2
Eric FrontFront End NG 2
Barcelona SPRINT 201615 DEVS on BACK + API + FRONT
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
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
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
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
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
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
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
Plone 5
Plone 6 XREST
APIJS
FRONT
POSSIBLE FUTURE
we need it at work (intranetum.com)
Performance problems on write operations and async
integration, lots of docker containers
Collecting all ideas, opinions of paining
zope/plone “features” and simplify
Why don’t use all the GOOD parts and ADAPT them
to create a REST CMS API FWT for a SIMPLER PLONE
backend ?
Simploneity
one way to do something
Non Opinionated
ZODB 5 ZEO asyncio
ZTK
An async app server that offers a traversable REST
API with a ZODB
And we can build a CMS on top of it
Headless CMS
• NOT included : The view part!
• Included : Strong flexible API
• Included : DB/Persistance
• Included : CRUD and Management ?
Content Type
• NO CMF
• zope.container and dx
• 1 content rule them all: container (Item)
Definition of content type
• Definition of Generic Content types global
• Content type defined in code with directives:
• catalog/index
• read/write
• primary
Definition of content typeclass 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" />
plone.jsonserializer
• Used on plone.app.mosaic
• Need to merge with plone.restapi
• Serializes and deserializes DX content and types to JSON
plone.registry
• Main/unique configuration place
• All persistent info in one place
API DEFINITION
• TRAVERSAL -> JSON
• FRAMING
• Websocket API
• PLONE REST API (BASE on plone.server)
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" }
CORS
• Defined by site on registry
• One configuration for all the site
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 } } ],
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
Traversal
• READ CALLS
• GET
• HEAD
• OPTIONS
• WRITE CALLS
• POST
• PATCH
• PUT
• DELETE
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)
Helpers
• subrequest : do a real request to API
• do_traverse : do a traversal with security
Upload/Download
• External BlobStorage with async (buffer and resumable) for upload and download
• TUS support for client resumable upload
• 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
Delegate to External
• Define the interfaces and allow to have different implementations to get:
• Users DB
• Catalog
No Acquisition
No Attribute Traverse• portal[‘folder1’][‘folder2’][‘item’]
NO Generic Setup
NO z3cform
Roles• plone.Owner
• plone.Editor
• plone.Reader
• plone.Anonymous
• plone.SiteAdmin
• plone.SiteDeleter
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
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
plone.app.openid
plone.app.iterateplone.app.dexterity
plone.app.caching
Products.CMFPlacefulWorkflow
Products.Archetypes
zope.testing
Products.ATContentTypes
plone.app.upgrade
ZODB3Zope2
Products.CMFPlone
zope.sitezope.publisherzope.processlifetimezope.interface
zope.componentzope.traversing
zope.taleszope.talzope.structuredtextzope.pagetemplate
zope.locationzope.i18nmessageidzope.i18nzope.eventzope.dottedname
zope.deprecation
zope.deferredimport
zope.container
zope.cachedescriptors
zope.app.localesz3c.autoincludetransaction
plonetheme.barceloneta
plone.themeplone.sessionplone.schemaplone.registry
plone.protectplone.portlets
plone.portlet.staticplone.portlet.collection
plone.outputfiltersplone.memoize
plone.lockingplone.intelligenttext
plone.indexer
plone.i18n
plone.contentrulesplone.browserlayerplone.batching
plone.app.workflowplone.app.vocabulariesplone.app.viewletmanagerplone.app.uuid
plone.app.usersplone.app.themingplone.app.registryplone.app.redirector
plone.app.portletsplone.app.localesplone.app.linkintegrityplone.app.layout
plone.app.multilingualplone.app.i18nplone.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.ptfive.localsitemanager
five.customerize
borg.localrole
Products.statusmessagesProducts.contentmigrationProducts.ResourceRegistriesProducts.PortalTransformsProducts.PluginRegistry
Products.PluggableAuthServiceProducts.PlonePAS
Products.PlacelessTranslationServiceProducts.PasswordResetToolProducts.MimetypesRegistry
Products.MimetypesRegistryProducts.GenericSetupProducts.ExternalEditorProducts.ExtendedPathIndexProducts.DCWorkflow
Products.CMFUidProducts.CMFQuickInstallerToolProducts.CMFEditionsProducts.CMFDynamicViewFTIProducts.CMFDiffToolProducts.CMFCoreExtensionClassDateTimeAcquisition
zdaemon
ZConfig
zc.lockfile
Products.StandardCacheManagersProducts.PythonScriptsProducts.MIMEToolsProducts.MailHostProducts.ExternalMethodProducts.BTreeFolder2zope.viewlet
zope.testbrowserzope.sizezope.sequencesort
zope.sendmailzope.securityzope.schemazope.ptresourcezope.proxyzope.lifecycleeventzope.exceptionszope.contenttypezope.contentproviderzope.configurationzope.browserresourcezope.browserpagezope.browsermenuzope.browserzLOGzExceptionstempstorage
pytzinitgroupsdocutilsZopeUndoRestrictedPythonRecordProducts.ZCTextIndex
Products.ZCatalogProducts.OFSPPersistenceMultiMapping
Missing
DocumentTemplateAccessControlProducts.SecureMailHostProducts.CMFFormControllerzope.ramcachezope.ramcacheplone.openidzope.annotation
z3c.formplone.z3cformplone.supermodelplone.autoformplone.app.z3cform
lxmlplone.schemaeditor
plone.rfc822plone.namedfileplone.formwidget.namedfileplone.dexterityplone.behaviorplone.app.textfieldz3c.zcmlhook
plone.cachepurgingplone.caching
Products.validationplone.app.widgets
plone.app.collection
plone.app.blobplone.uuid
plone.folderProducts.ZSQLMethodszope.datetimezope.brokenzope.filerepresentationplone.keyringcollective.monkeypatcher
five.globalrequestrepoze.xmliterplone.transformchainsixUnidecodezope.componentvocabulary
zope.formlibplone.app.imagingplone.app.querystringromanplone.subrequest
plone.resourceeditorplone.resource
diazoplone.app.relationfieldplone.app.intid
z3c.relationfieldarchetypes.multilingual
plone.app.lockingbehavior
plone.app.versioningbehavior
plone.app.eventplone.stringinterpzope.globalrequest
Chameleonz3c.ptProducts.ZopeVersionControl
zope.copyzope.app.publicationplone.scaleplone.synchronize
plone.alteregoarchetypes.schemaextenderfive.intidzope.intidzc.relationz3c.objpathplone.formwidget.recurrence
plone.eventProducts.DateRecurringIndexcollective.elephantvocabulary
zope.errorzope.authenticationzope.keyreference
plone.app.openid
plone.app.iterateplone.app.dexterity
plone.app.caching
Products.CMFPlacefulWorkflow
Products.Archetypes
zope.testing
Products.ATContentTypes
plone.app.upgrade
ZODB3
Zope2
Products.CMFPlone
zope.sitezope.publisherzope.processlifetimezope.interface
zope.componentzope.traversing
zope.taleszope.talzope.structuredtext
zope.pagetemplate
zope.locationzope.i18nmessageidzope.i18nzope.event
zope.dottednamezope.deprecation
zope.deferredimportzope.container
zope.cachedescriptors
zope.app.locales
z3c.autoinclude
transaction
plonetheme.barceloneta
plone.theme
plone.sessionplone.schemaplone.registryplone.protectplone.portlets
plone.portlet.staticplone.portlet.collection
plone.outputfiltersplone.memoizeplone.lockingplone.intelligenttext
plone.indexer
plone.i18n
plone.contentrulesplone.browserlayerplone.batching
plone.app.workflowplone.app.vocabulariesplone.app.viewletmanagerplone.app.uuid
plone.app.users
plone.app.theming
plone.app.registryplone.app.redirector
plone.app.portletsplone.app.localesplone.app.linkintegrityplone.app.layout
plone.app.multilingualplone.app.i18nplone.app.folderplone.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.PasswordResetToolProducts.MimetypesRegistry
Products.MimetypesRegistry
Products.GenericSetup
Products.ExternalEditorProducts.ExtendedPathIndex
Products.DCWorkflowProducts.CMFUidProducts.CMFQuickInstallerTool
Products.CMFEditionsProducts.CMFDynamicViewFTI
Products.CMFDiffTool
Products.CMFCore
ExtensionClass
DateTimeAcquisition
zdaemon
ZConfig
zc.lockfile
Products.StandardCacheManagersProducts.PythonScriptsProducts.MIMEToolsProducts.MailHostProducts.ExternalMethodProducts.BTreeFolder2
zope.viewlet
zope.testbrowserzope.size
zope.sequencesortzope.sendmailzope.security
zope.schema
zope.ptresource
zope.proxy
zope.lifecycleevent
zope.exceptions
zope.contenttypezope.contentproviderzope.configurationzope.browserresourcezope.browserpagezope.browsermenuzope.browser
zLOGzExceptionstempstorage
pytzinitgroupsdocutilsZopeUndoRestrictedPythonRecord
Products.ZCTextIndexProducts.ZCatalog
Products.OFSPPersistenceMultiMapping
Missing
DocumentTemplateAccessControlProducts.SecureMailHostProducts.CMFFormController
zope.ramcachezope.ramcacheplone.openidzope.annotation
z3c.formplone.z3cform
plone.supermodel
plone.autoform
plone.app.z3cform
plone.schemaeditorplone.rfc822
plone.namedfile
plone.formwidget.namedfile
plone.dexterityplone.behaviorplone.app.textfield
z3c.zcmlhook
plone.cachepurging
plone.caching
Products.validationplone.app.widgets
plone.app.collection
plone.app.blob
plone.uuid
plone.folder
Products.ZSQLMethods
zope.datetimezope.brokenzope.filerepresentation
plone.keyring
collective.monkeypatcher
five.globalrequest
repoze.xmliter
plone.transformchain
Unidecodezope.componentvocabulary
zope.formlib
plone.app.imaging
plone.app.querystring
plone.subrequestplone.resourceeditorplone.resourcediazoplone.app.relationfield
plone.app.intidz3c.relationfield
archetypes.multilingual
plone.app.lockingbehavior
plone.app.versioningbehaviorplone.app.event
plone.stringinterp
zope.globalrequest
Chameleon
z3c.pt
Products.ZopeVersionControlzope.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.DateRecurringIndexcollective.elephantvocabularyzope.error
zope.authenticationzope.keyreference
Products.OFSP
AccessControl
zope.security/securitypolicy plone.server
aiohttp/plone.server
Products.ExtendedPathIndex
Products.ZCTextIndexProducts.ZCatalog
Products.DateRecurringIndex
zope.testing
zope.publisher
zope.testbrowser
plone.app.users
DateTime
Products.BTreeFolder2
plone.portlets
zope.tales
ExtensionClass
zope.site
zope.traversing
plone.app.openid
plone.app.iterate
plone.app.dexterity
plone.app.caching
Products.CMFPlacefulWorkflow
zope.testing
plone.app.upgrade
ZODB3
Products.CMFPlone
zope.sitezope.publisherzope.processlifetimezope.interface
zope.componentzope.traversing
zope.taleszope.talzope.structuredtext
zope.locationzope.i18nmessageidzope.i18n
zope.event
zope.dottednamezope.deprecation
zope.deferredimportzope.container
zope.cachedescriptors
zope.app.locales
z3c.autoincludetransaction
plone.sessionplone.schemaplone.registryplone.protectplone.portlets
plone.portlet.static
plone.portlet.collection
plone.outputfiltersplone.memoizeplone.lockingplone.intelligenttext
plone.indexer
plone.i18n
plone.contentrulesplone.browserlayerplone.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.localesplone.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.PluggableAuthServiceProducts.PlonePAS
Products.PlacelessTranslationService
Products.PasswordResetToolProducts.MimetypesRegistry
Products.MimetypesRegistry
Products.GenericSetup
Products.ExternalEditorProducts.ExtendedPathIndex
Products.DCWorkflow
Products.CMFUid
Products.CMFQuickInstallerTool
Products.CMFEditions
Products.CMFDynamicViewFTI
ExtensionClass
DateTime
zc.lockfile
Products.StandardCacheManagersProducts.PythonScriptsProducts.MIMEToolsProducts.MailHostProducts.ExternalMethodProducts.BTreeFolder2
zope.testbrowserzope.size
zope.sequencesortzope.sendmailzope.security
zope.schemazope.ptresource
zope.proxyzope.lifecycleeventzope.exceptionszope.contenttype
zope.contentprovider
zope.configuration
zope.browserresource
zope.browserpage
zope.browser
zLOGzExceptionstempstorage
docutils
ZopeUndoRestrictedPythonRecord
Products.ZCTextIndex
Products.ZCatalogPersistence
MultiMapping
Missing
DocumentTemplateAccessControlProducts.SecureMailHost
zope.ramcachezope.ramcacheplone.openidzope.annotation
plone.supermodel
plone.schemaeditor
plone.rfc822
plone.dexterity
plone.behaviorplone.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.imagingplone.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.intidz3c.objpath
plone.event
Products.DateRecurringIndex
collective.elephantvocabulary
zope.error
zope.authentication
zope.keyreference
zope.browsermenu
Persistence
Products.CMFQuickInstallerTool
plone.app.blob
plone.serverplone.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
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.ExternalMethodzope.size
zope.sequencesort
zope.sendmail
zope.security
zope.schema
zope.proxy
zope.lifecycleevent
zope.exceptions
zope.contenttype
zope.contentprovider
zope.configurationzLOG
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.versioningbehaviorplone.stringinterp
Products.ZopeVersionControl
zope.copy
zope.app.publication
plone.scale
plone.synchronize
plone.alteregozope.intid z3c.objpath
collective.elephantvocabulary
zope.error
zope.authentication
zope.keyreference
zope.event
zdaemon
ZConfig
persistent
zc.relation
Products.CMFDiffTool
Products.ExternalEditor
Products.PasswordResetTool
How transactions work?
• 1 connection x thread
• locking 1 transaction x request object
• for each request cache updated
Async loop
• Why you need async ??
• Async Tasks connected to ZODB
Async Queueawait getUtility(IQueueUtility).add(viewOperation)
Main Thread
Transaction Executor Thread
Queue Executor Thread
Queue Executor Thread
Queue Executor Thread
ZEO Networking
Thread
AioHTTP
• FAST
• SSL support
• Custom router
• Websockets support
HTTP client/server for asyncio
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
Python
>= 3.5
Testing
• py.test + layers (gocept.pytestlayer)
• coverage
• Functional to API
• WS and API wrappers / helpers
Some addons
• users : pserver.oauth
• catalog : pserver.elasticsearch
• field : pserver.gcloudstorage
• cms : pserver.cms
Performance
• standalone (12t 100c) = 119% + ràpid
• cluster 3 UC
• GUnicorn UVLoop + 2 processos plone.server
• Mean RO : 170% + ràpid
Performance
Performance
Performance
DEMO
• https://github.com/pyrenees/pserver.demo.git
• Content Type definition
• API definition
• Install
• Configuration of a site
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
Futures
• Neo4J backend
• GraphQL query interface
• Create DB in a ZEO ?
Near future
• REST API
• PLONE_CLIENT
We are a community! We can have fun!
We should be proud!
Who wants this “experiment” is named
plone.server ?
Thanks !