SlideShare a Scribd company logo
1 of 32
Download to read offline
Back to the Future - 

Python 3 und Plone 5.2
am Beispiel „Onkopedia“
Andreas Jung
www.zopyx.com - info@zopyx.com
Plone-Tagung
München, Februar 2019
1
• DACH Leitlinienportal für Hämatologie und med. Onkologie
• Träger: Deutsche Gesellschaft für Hämatologie und Onkologie
• Med. Leitlinien, Studienprotokolle, Zulassungsinformationen zu Medikamenten,
Arzneimittelbewertungen, Pflegeinformationen, Wissensdatenbank
• DOCX XML → HTML, PDF, EPub
• Web + App
• www.onkopedia.com
!2
!3
!4
!5
!6
!7
Architektur
!8
Stand/Historie
•Version 1 (2010):
• Plone 4 mit ZOPYX Authoring Environment (Archetypes)
• HTML-basiertes Publishing (OpenOffice Konvertierung)
• Archetypes, Plone-basierte Ablage
•Version 2 (2014):
• Plone 4 mit ZOPYX XML-Director (Dexterity)
• XML-basierter Publishing Workflow
• XML Datenbank, XML DOCX Roundtripping
•Version 3 (2018/19):
• eigene APP mit vorgezogenem Design Relaunch
• partieller Design Relaunch im Web
!9
Migrationsziele
• Responsive Relaunch
• Ablösung m.onkopedia.com
• Umsetzung App Funktionalität auf mobile Version
• Plone 5.2/Python 2.7 vs. Plone 5.2/Python 3
• In-Place Migration vs. Export/Import Migration
• XML DB: eXistDB, BaseX, FusionDB, Filesystem
!10
Python 2.7 vs. Python 3?
• initialer Plan:
• Migration auf Plone 5.2/Python 2.7
• spätere Migration auf Plone 5.2/Python 3
• finale Entscheidung: Komplettumstellung auf Python 3.6/3.7
• Python 2.7: verschwendete Zeit und Geld
• Python 3 als Teil des Relaunches besser kommunizierbar
• Vorteile und Synergien mit anderen Kundenprojekten
!11
Onkopedia Plone Package
ZODB
XML -DIRECTOR
PyFilesystem 0.5
webdav.fs
eXist-DB
P&P Plone Connector
P&P Client Python
Storage 3rd Party eigener Code
Pyramid
pp.server
PDFreactor
P&P Server
Onkopedia Applikation PDF Generator
P&P = Produce & Publish
Architektur unter Plone 4
!12
Portierung nach Python 3
• Add-Ons und Abhängigkeiten von unten nach oben im Abhängigkeitsgraphen portieren
• minimaler Buildout mit jeweils einem Add-On
• Ziel #1: Instanz startfähig bekommen
• Abhängigkeiten auf Python 3 Kompatibilität prüfen
• ggf. abhängige Module ersetzen
• Importe anpassen händisch oder via six/modernize
• händische Ersetzung bestimmte Code Konstrukte, z.B.
• implements(ISomething) → @implementer(ISomething)
• Tests: händisch und automatisiert (Unittests, Robotests falls vorhanden)
!13
Typisierung/Annotations
• ZOPE URL Feldklassifizierer:
• http://host/plone/foo?text:unicode=ÜÖÄ&number:int=123&price:float=2.39
• implizite Prüfung und implizite Umwandlung innerhalb von Zope
• Python 3 Type Annotations
• Typisierung von Funktionsparameter und Rückgabewerten
• statische Analyse via mypy
• optionale Runtime-Checks
!14
str/unicode vs bytes/str
• Klare Trennung im Code zwischen Text und Bytes prüfen
• insbesondere bei IO und Funktionssignaturen (Type Annotations)
• Explizite Typprüfungen/Assertions geben Sicherheit
•safe_unicode() vermeiden und eliminieren
•Verwendung von encode() und decode() zur Konvertierung

<class str> nach <class bytes> und umgekehrt fragwürdig
Python 2 Python 3
Bytes/

UTF-8 String
„foo“
<class str>
b“foo“
<class bytes>
Text/Unicode
u“üöäß“
<class unicode>
“üöäß“
u“üöäß“
<class str>
!15
Onkopedia Plone Package
ZODB
XML -DIRECTOR
PyFilesystem 0.5
webdav.fs
eXist-DB
P&P Plone Connector
P&P Client Python
Storage 3rd Party eigener Code
Pyramid
pp.server
PDFreactor
P&P Server
Onkopedia Applikation PDF Generator
P&P = Produce & Publish
PDF Konvertierungsstack
!16
pyfilesystem/WebDAV (1/2)
• Abstraktionslayer auf hierarchische
Storages, Datenbank, Dateisysteme
• WebDAV, S(FTP), RPCFS, OSFS, S3,
ZIP, Memory, MultiFS, WrapFS,
Dropbox, Onedrive, Github
• fs < 1: Python 2.7
• fs >= 2: Python 2+3 kompatibel,
kompletter Rewrite, API inkompatibel
• Abstraktion nach unten über
Storage-spezifische Treiber
• Applikationscode ist unabhängig 

vom Storage
• WebDAV über build-in Driver
handle = fs.opener(some_url)
with handle.open('foo', 'w') as fp:
fp.write(data)
handle.listdir(dirname)
handle.makedir('foo/bar/test')
handle.removedir('foo/bar/test)
handle.exists(some_filename)
handle.isfile(some_name)
handle.move(src, dst)
handle.copy(src, dst)
!17
Verfügbare Treiber
!18
Build-In Official 3rd party
• AppFS 

Filesystems for application data.
• FTPFS 

File Transfer Protocol.
• MemoryFS 

An in-memory filesystem.
• MountFS 

A virtual filesystem that
can mount other filesystems.
• MultiFS 

A virtual filesystem that combines
other filesystems.
• OSFS 

OS Filesystem (hard-drive).
• TarFS 

Read and write compressed Tar
archives.
• TempFS 

Contains temporary data.
• ZipFS 

Read and write Zip files.
• S3FS 

Amazon S3 Filesystem.
• WebDavFS 

WebDav Filesystem.
• fs.archive 

Enhanced archive filesystems.
• fs.dropboxfs 

Dropbox Filesystem.
• fs-gcsfs 

Google Cloud Storage Filesystem.
• fs.googledrivefs 

Google Drive Filesystem.
• fs.onedrivefs 

Microsoft OneDrive Filesystem.
• fs.smbfs 

A filesystem running over the SMB
protocol.
• fs.sshfs 

A filesystem running over the SSH
protocol.
• fs.youtube 

A filesystem for accessing YouTube
Videos and Playlists.
• fs.dnla 

A filesystem for accessing accessing
DLNA Servers.
• imapfs 

Work in progress filesystem for imap
(email) servers.
pyfilesystem2/WebDAV (2/2)
• Rewrite des WebDAV Treiber
notwendig für Python 3
(fs.webdavfs)
• externe Beauftragung
• Qualitätssicherung über
pyfilesystem2 Testsuite 

(300 Tests)
• Umfangreiche Testsuite gegen
verschiedene WebDAV Server
Implementierungen
!19
Onkopedia Plone Package
ZODB
XML -DIRECTOR
PyFilesystem 0.5
webdav.fs
eXist-DB
P&P Plone Connector
P&P Client Python
Storage 3rd Party eigener Code
Pyramid
pp.server
PDFreactor
P&P Server
Onkopedia Applikation PDF Generator
P&P = Produce & Publish
PDF Konvertierungsstack
!20
XML-Director Add-On
• Integration von Dateisystemen Storages, XML DB
etc. in Plone
• „Mountpoint“ Konzept
• erweiterbar über Behaviors
• integriert mit Path Traversal
• XML Layer für Validierung, Transformationen und
Pipelines
• Abhängigkeit von pyfilesystem 1/Python 2.7
!21
XML-Director Connector
• Reimplementierung von XML-Director
• auf Basis von Python 3 (Backport auf 2.7)
• Einsatz von pyfilesystem2/fs.webdavfs
• schlankere, einfachere und
leistungsfähigere Implementierung
• lauffähig mit Plone 5.X (Python 2 + 3)
!22
Onkopedia Plone Package
ZODB
XML -DIRECTOR
PyFilesystem 0.5
webdav.fs
eXist-DB
P&P Plone Connector
P&P Client Python
Storage 3rd Party eigener Code
Pyramid
pp.server
PDFreactor
P&P Server
Onkopedia Applikation PDF Generator
P&P = Produce & Publish
PDF Konvertierungsstack
!23
PDF Konvertierungsstack
• P&P Server
• bereits Python 3 kompatibel seit vielen Jahren
• Migration von Pyramid nach 

Sanic Webframework
• Plone Integration
• P&P Plone Client Connector: einfach portiert
• P&P Python Client Bindings: schon viele Jahre
Python 3 kompatibel
!24
Onkopedia Plone Package
ZODB
XML -DIRECTOR
PyFilesystem 0.5
webdav.fs
eXist-DB
P&P Plone Connector
P&P Client Python
Storage 3rd Party eigener Code
Pyramid
pp.server
PDFreactor
P&P Server
Onkopedia Applikation PDF Generator
P&P = Produce & Publish
Portierung Onkopedia App
!25
Portierung Onkopedia App
• Anpassung Importe
• @implementer Dekorator
• Anpassung an neue pyfilesystem API
• diverse Anpassungen <bytes> vs. <str>
• ca. 20% Rewrite des Codes wg. neuer
Anforderungen für die Zukunft
!26
Onkopedia Plone Package (portiert)
ZODB
XML Connector/new
PyFilesystem 2.0
fs.webdav
FusionDB/Dateisystem
P&P Plone Connector/new
P&P Client Python/new
Storage 3rd Party eigener Code
Sanic
pp.server/new
PDFreactor
P&P Server
Onkopedia Applikation PDF Generator
P&P = Produce & Publish
Architektur unter Plone 5
!27
Content Migration (1/2)
• Plone in-place Migration vs. frischer Export/Import
• Start mit einer sauberen Datenbank
• Migration via plone.restapi erfolgreich in anderen
Migrationsprojekten
• Änderung an einigen Inhaltstypen
• partielle Umstrukturierung
!28
Content Migration (2/2)
Quellsystem Zielsysteme
plone.restapi
Provisioning APImigrate.py
HTTP
Export/Dump
!29
Sonstiges
• kompletter Verzicht auf Resource Registries
• eigene Minifizierung, Einbettung über ein Viewlet
• Umstellung von ZServer auf WSGI/Waitress ohne Probleme
• keine Unterschiede im Deployment zwischen Python 2 und
Python 3
!30
Qualitätssicherung
• manuelles Testen, manuelles Testen, manuelles Testen
• zusätzlich: Unit-Testing
• Fuzzing mit Zufallsdaten/Texten (non-ASCII, Unicode)
• Tests in eigenen Projekten („Eat your own dog food“)
• Kundentests
!31
Back to the Future
• Python 3.0 Release am 3.12.2008
• nach mehr als 10 Jahren können wir Python 3 (fast komplett) 

endlich auch in Zope und Plone nutzen
• Death to Python 2
• Plone 5.2/Python 3 Backend wird stabil und ready-for-production sein
• Plone 5 Frontend weiterhin voller kleiner und großer Usability Bugs
• Danke an das Plone Python 3 Porting Team
!32

More Related Content

What's hot

Produce & Publish V 2.0 - Authoring Environment - Single-Source Multi-Channel...
Produce & Publish V 2.0 - Authoring Environment - Single-Source Multi-Channel...Produce & Publish V 2.0 - Authoring Environment - Single-Source Multi-Channel...
Produce & Publish V 2.0 - Authoring Environment - Single-Source Multi-Channel...Andreas Jung
 
Dzug Zope Optimized
Dzug Zope OptimizedDzug Zope Optimized
Dzug Zope OptimizedAndreas Jung
 
Plone Migrationen mit Plone REST API
Plone Migrationen mit Plone REST APIPlone Migrationen mit Plone REST API
Plone Migrationen mit Plone REST APIAndreas Jung
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance ReloadedGregor Goldbach
 
Frontend Formulare in TYPO3 8 LTS
Frontend Formulare in TYPO3 8 LTSFrontend Formulare in TYPO3 8 LTS
Frontend Formulare in TYPO3 8 LTSPeter Kraume
 
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...Informatik Aktuell
 
Der gesamte Redaktionsprozess mit Open Source
Der gesamte Redaktionsprozess mit Open SourceDer gesamte Redaktionsprozess mit Open Source
Der gesamte Redaktionsprozess mit Open Sourceyellowcow
 
TYPO3 Monitoring mit t3monitoring
TYPO3 Monitoring mit t3monitoringTYPO3 Monitoring mit t3monitoring
TYPO3 Monitoring mit t3monitoringPeter Kraume
 
Überblick zum DFG-Projekt OCR-D
Überblick zum DFG-Projekt OCR-DÜberblick zum DFG-Projekt OCR-D
Überblick zum DFG-Projekt OCR-Dcneudecker
 
ALTO, PAGE & Co. Formate für Volltexte
ALTO, PAGE & Co. Formate für VolltexteALTO, PAGE & Co. Formate für Volltexte
ALTO, PAGE & Co. Formate für Volltextecneudecker
 
Versionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und GitVersionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und Gitpaultcochrane
 
Paradiesisch - OpenNTF
Paradiesisch - OpenNTFParadiesisch - OpenNTF
Paradiesisch - OpenNTFOliver Busse
 

What's hot (13)

Produce & Publish V 2.0 - Authoring Environment - Single-Source Multi-Channel...
Produce & Publish V 2.0 - Authoring Environment - Single-Source Multi-Channel...Produce & Publish V 2.0 - Authoring Environment - Single-Source Multi-Channel...
Produce & Publish V 2.0 - Authoring Environment - Single-Source Multi-Channel...
 
Dzug Zope Optimized
Dzug Zope OptimizedDzug Zope Optimized
Dzug Zope Optimized
 
Plone Migrationen mit Plone REST API
Plone Migrationen mit Plone REST APIPlone Migrationen mit Plone REST API
Plone Migrationen mit Plone REST API
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
 
PHP5 und Oracle
PHP5 und OraclePHP5 und Oracle
PHP5 und Oracle
 
Frontend Formulare in TYPO3 8 LTS
Frontend Formulare in TYPO3 8 LTSFrontend Formulare in TYPO3 8 LTS
Frontend Formulare in TYPO3 8 LTS
 
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
 
Der gesamte Redaktionsprozess mit Open Source
Der gesamte Redaktionsprozess mit Open SourceDer gesamte Redaktionsprozess mit Open Source
Der gesamte Redaktionsprozess mit Open Source
 
TYPO3 Monitoring mit t3monitoring
TYPO3 Monitoring mit t3monitoringTYPO3 Monitoring mit t3monitoring
TYPO3 Monitoring mit t3monitoring
 
Überblick zum DFG-Projekt OCR-D
Überblick zum DFG-Projekt OCR-DÜberblick zum DFG-Projekt OCR-D
Überblick zum DFG-Projekt OCR-D
 
ALTO, PAGE & Co. Formate für Volltexte
ALTO, PAGE & Co. Formate für VolltexteALTO, PAGE & Co. Formate für Volltexte
ALTO, PAGE & Co. Formate für Volltexte
 
Versionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und GitVersionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und Git
 
Paradiesisch - OpenNTF
Paradiesisch - OpenNTFParadiesisch - OpenNTF
Paradiesisch - OpenNTF
 

Similar to Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia

20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatengeKarin Patenge
 
Composer und TYPO3
Composer und TYPO3Composer und TYPO3
Composer und TYPO3Peter Kraume
 
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit VagrantDeployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit VagrantChristoph Möller
 
Alle Änderungen zu TYPO3 6.0
Alle Änderungen zu TYPO3 6.0Alle Änderungen zu TYPO3 6.0
Alle Änderungen zu TYPO3 6.0Alex Kellner
 
Apache Kafka
Apache KafkaApache Kafka
Apache Kafkagedoplan
 
Fit für die digitale Bibliothek? (2007)
Fit für die digitale Bibliothek? (2007)Fit für die digitale Bibliothek? (2007)
Fit für die digitale Bibliothek? (2007)Ralf Stockmann
 
Python, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und RaumfahrtforschungPython, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und RaumfahrtforschungAndreas Schreiber
 
Von Test nach live mit Rex
Von Test nach live mit RexVon Test nach live mit Rex
Von Test nach live mit Rexinovex GmbH
 
Von Test nach Live mit Rex
Von Test nach Live mit RexVon Test nach Live mit Rex
Von Test nach Live mit RexJan Gehring
 
AdminCamp 14 - IBM Connections Deep Dive
AdminCamp 14 - IBM Connections Deep DiveAdminCamp 14 - IBM Connections Deep Dive
AdminCamp 14 - IBM Connections Deep DiveKlaus Bild
 
Schweine latein-vortrag
Schweine latein-vortragSchweine latein-vortrag
Schweine latein-vortragRamon Wartala
 
Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?KurtStockinger
 
Icinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga
 
Testing TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with BehatTesting TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with BehatMarkus Goldbeck
 
Konfigurations Management mit Puppet (Webinar vom 17.10.2013)
Konfigurations Management mit Puppet (Webinar vom 17.10.2013)Konfigurations Management mit Puppet (Webinar vom 17.10.2013)
Konfigurations Management mit Puppet (Webinar vom 17.10.2013)NETWAYS
 
TYPO3 Performance (TYPO3camp München)
TYPO3 Performance (TYPO3camp München)TYPO3 Performance (TYPO3camp München)
TYPO3 Performance (TYPO3camp München)Marcus Schwemer
 
FAL in Extbase-Extensions
FAL in Extbase-ExtensionsFAL in Extbase-Extensions
FAL in Extbase-Extensionsin2code
 

Similar to Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia (20)

20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge
 
Composer und TYPO3
Composer und TYPO3Composer und TYPO3
Composer und TYPO3
 
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit VagrantDeployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
 
Neuerungen in TYPO3 6.0
Neuerungen in TYPO3 6.0Neuerungen in TYPO3 6.0
Neuerungen in TYPO3 6.0
 
Alle Änderungen zu TYPO3 6.0
Alle Änderungen zu TYPO3 6.0Alle Änderungen zu TYPO3 6.0
Alle Änderungen zu TYPO3 6.0
 
Apache Kafka
Apache KafkaApache Kafka
Apache Kafka
 
CKAN by Friedrich Lindenberg
CKAN by Friedrich LindenbergCKAN by Friedrich Lindenberg
CKAN by Friedrich Lindenberg
 
Fit für die digitale Bibliothek? (2007)
Fit für die digitale Bibliothek? (2007)Fit für die digitale Bibliothek? (2007)
Fit für die digitale Bibliothek? (2007)
 
Python, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und RaumfahrtforschungPython, Plone und Zope in der Luft- und Raumfahrtforschung
Python, Plone und Zope in der Luft- und Raumfahrtforschung
 
Von Test nach live mit Rex
Von Test nach live mit RexVon Test nach live mit Rex
Von Test nach live mit Rex
 
Von Test nach Live mit Rex
Von Test nach Live mit RexVon Test nach Live mit Rex
Von Test nach Live mit Rex
 
AdminCamp 14 - IBM Connections Deep Dive
AdminCamp 14 - IBM Connections Deep DiveAdminCamp 14 - IBM Connections Deep Dive
AdminCamp 14 - IBM Connections Deep Dive
 
Schweine latein-vortrag
Schweine latein-vortragSchweine latein-vortrag
Schweine latein-vortrag
 
Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
Analyse von Applikationslogs und Querylogs: Datenbanken, Hadoop oder Splunk?
 
Icinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga 2009 at Nagios Workshop
Icinga 2009 at Nagios Workshop
 
Testing TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with BehatTesting TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with Behat
 
Konfigurations Management mit Puppet (Webinar vom 17.10.2013)
Konfigurations Management mit Puppet (Webinar vom 17.10.2013)Konfigurations Management mit Puppet (Webinar vom 17.10.2013)
Konfigurations Management mit Puppet (Webinar vom 17.10.2013)
 
Python Academy
Python AcademyPython Academy
Python Academy
 
TYPO3 Performance (TYPO3camp München)
TYPO3 Performance (TYPO3camp München)TYPO3 Performance (TYPO3camp München)
TYPO3 Performance (TYPO3camp München)
 
FAL in Extbase-Extensions
FAL in Extbase-ExtensionsFAL in Extbase-Extensions
FAL in Extbase-Extensions
 

More from Andreas Jung

State of PrintCSS - MarkupUK 2023.pdf
State of PrintCSS - MarkupUK 2023.pdfState of PrintCSS - MarkupUK 2023.pdf
State of PrintCSS - MarkupUK 2023.pdfAndreas Jung
 
Typesense Plone Integration Plone Conference 2022 Namur
Typesense Plone Integration Plone Conference 2022 NamurTypesense Plone Integration Plone Conference 2022 Namur
Typesense Plone Integration Plone Conference 2022 NamurAndreas Jung
 
PrintCSS W3C workshop at XMLPrague 2020
PrintCSS W3C workshop at XMLPrague 2020PrintCSS W3C workshop at XMLPrague 2020
PrintCSS W3C workshop at XMLPrague 2020Andreas Jung
 
PrintCSS workshop XMLPrague 2020
PrintCSS workshop XMLPrague 2020PrintCSS workshop XMLPrague 2020
PrintCSS workshop XMLPrague 2020Andreas Jung
 
Plone 5.2 migration at University Ghent, Belgium
Plone 5.2 migration at University Ghent, BelgiumPlone 5.2 migration at University Ghent, Belgium
Plone 5.2 migration at University Ghent, BelgiumAndreas Jung
 
Plone migrations using plone.restapi
Plone migrations using plone.restapiPlone migrations using plone.restapi
Plone migrations using plone.restapiAndreas Jung
 
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...Andreas Jung
 
Creating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsCreating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsAndreas Jung
 
Creating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsCreating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsAndreas Jung
 
The Plone and The Blockchain
The Plone and The BlockchainThe Plone and The Blockchain
The Plone and The BlockchainAndreas Jung
 
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCsContent Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCsAndreas Jung
 
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.Andreas Jung
 
Why we love ArangoDB. The hunt for the right NosQL Database
Why we love ArangoDB. The hunt for the right NosQL DatabaseWhy we love ArangoDB. The hunt for the right NosQL Database
Why we love ArangoDB. The hunt for the right NosQL DatabaseAndreas Jung
 
Building bridges - Plone Conference 2015 Bucharest
Building bridges   - Plone Conference 2015 BucharestBuilding bridges   - Plone Conference 2015 Bucharest
Building bridges - Plone Conference 2015 BucharestAndreas Jung
 
CSS Paged Media - A review of tools and techniques
CSS Paged Media - A review of tools and techniquesCSS Paged Media - A review of tools and techniques
CSS Paged Media - A review of tools and techniquesAndreas Jung
 
Integration of Plone with eXist-db
Integration of Plone with eXist-dbIntegration of Plone with eXist-db
Integration of Plone with eXist-dbAndreas Jung
 
Plone Integration with eXist-db - Structured Content rocks
Plone Integration with eXist-db - Structured Content rocksPlone Integration with eXist-db - Structured Content rocks
Plone Integration with eXist-db - Structured Content rocksAndreas Jung
 
Why Plone Will Die
Why Plone Will DieWhy Plone Will Die
Why Plone Will DieAndreas Jung
 
Onkopedia - ein medizinisches Fachportal auf Basis von Plone
Onkopedia  - ein medizinisches Fachportal auf Basis von PloneOnkopedia  - ein medizinisches Fachportal auf Basis von Plone
Onkopedia - ein medizinisches Fachportal auf Basis von PloneAndreas Jung
 

More from Andreas Jung (20)

State of PrintCSS - MarkupUK 2023.pdf
State of PrintCSS - MarkupUK 2023.pdfState of PrintCSS - MarkupUK 2023.pdf
State of PrintCSS - MarkupUK 2023.pdf
 
Typesense Plone Integration Plone Conference 2022 Namur
Typesense Plone Integration Plone Conference 2022 NamurTypesense Plone Integration Plone Conference 2022 Namur
Typesense Plone Integration Plone Conference 2022 Namur
 
PrintCSS W3C workshop at XMLPrague 2020
PrintCSS W3C workshop at XMLPrague 2020PrintCSS W3C workshop at XMLPrague 2020
PrintCSS W3C workshop at XMLPrague 2020
 
PrintCSS workshop XMLPrague 2020
PrintCSS workshop XMLPrague 2020PrintCSS workshop XMLPrague 2020
PrintCSS workshop XMLPrague 2020
 
Plone 5.2 migration at University Ghent, Belgium
Plone 5.2 migration at University Ghent, BelgiumPlone 5.2 migration at University Ghent, Belgium
Plone 5.2 migration at University Ghent, Belgium
 
Plone migrations using plone.restapi
Plone migrations using plone.restapiPlone migrations using plone.restapi
Plone migrations using plone.restapi
 
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
Plone im Einsatz bei der Universität des Saarländes als Shop-System und Gefah...
 
Creating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsCreating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCs
 
Creating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCsCreating Content Together - Plone Integration with SMASHDOCs
Creating Content Together - Plone Integration with SMASHDOCs
 
The Plone and The Blockchain
The Plone and The BlockchainThe Plone and The Blockchain
The Plone and The Blockchain
 
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCsContent Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
Content Gemeinsam Erstellen: Integration Plone mit SMASHDOCs
 
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
PDF Generierung mit XML/HTML und CSS - was die Tools können und was nicht.
 
Why we love ArangoDB. The hunt for the right NosQL Database
Why we love ArangoDB. The hunt for the right NosQL DatabaseWhy we love ArangoDB. The hunt for the right NosQL Database
Why we love ArangoDB. The hunt for the right NosQL Database
 
PyFilesystem
PyFilesystemPyFilesystem
PyFilesystem
 
Building bridges - Plone Conference 2015 Bucharest
Building bridges   - Plone Conference 2015 BucharestBuilding bridges   - Plone Conference 2015 Bucharest
Building bridges - Plone Conference 2015 Bucharest
 
CSS Paged Media - A review of tools and techniques
CSS Paged Media - A review of tools and techniquesCSS Paged Media - A review of tools and techniques
CSS Paged Media - A review of tools and techniques
 
Integration of Plone with eXist-db
Integration of Plone with eXist-dbIntegration of Plone with eXist-db
Integration of Plone with eXist-db
 
Plone Integration with eXist-db - Structured Content rocks
Plone Integration with eXist-db - Structured Content rocksPlone Integration with eXist-db - Structured Content rocks
Plone Integration with eXist-db - Structured Content rocks
 
Why Plone Will Die
Why Plone Will DieWhy Plone Will Die
Why Plone Will Die
 
Onkopedia - ein medizinisches Fachportal auf Basis von Plone
Onkopedia  - ein medizinisches Fachportal auf Basis von PloneOnkopedia  - ein medizinisches Fachportal auf Basis von Plone
Onkopedia - ein medizinisches Fachportal auf Basis von Plone
 

Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia

  • 1. Back to the Future - 
 Python 3 und Plone 5.2 am Beispiel „Onkopedia“ Andreas Jung www.zopyx.com - info@zopyx.com Plone-Tagung München, Februar 2019 1
  • 2. • DACH Leitlinienportal für Hämatologie und med. Onkologie • Träger: Deutsche Gesellschaft für Hämatologie und Onkologie • Med. Leitlinien, Studienprotokolle, Zulassungsinformationen zu Medikamenten, Arzneimittelbewertungen, Pflegeinformationen, Wissensdatenbank • DOCX XML → HTML, PDF, EPub • Web + App • www.onkopedia.com !2
  • 3. !3
  • 4. !4
  • 5. !5
  • 6. !6
  • 7. !7
  • 9. Stand/Historie •Version 1 (2010): • Plone 4 mit ZOPYX Authoring Environment (Archetypes) • HTML-basiertes Publishing (OpenOffice Konvertierung) • Archetypes, Plone-basierte Ablage •Version 2 (2014): • Plone 4 mit ZOPYX XML-Director (Dexterity) • XML-basierter Publishing Workflow • XML Datenbank, XML DOCX Roundtripping •Version 3 (2018/19): • eigene APP mit vorgezogenem Design Relaunch • partieller Design Relaunch im Web !9
  • 10. Migrationsziele • Responsive Relaunch • Ablösung m.onkopedia.com • Umsetzung App Funktionalität auf mobile Version • Plone 5.2/Python 2.7 vs. Plone 5.2/Python 3 • In-Place Migration vs. Export/Import Migration • XML DB: eXistDB, BaseX, FusionDB, Filesystem !10
  • 11. Python 2.7 vs. Python 3? • initialer Plan: • Migration auf Plone 5.2/Python 2.7 • spätere Migration auf Plone 5.2/Python 3 • finale Entscheidung: Komplettumstellung auf Python 3.6/3.7 • Python 2.7: verschwendete Zeit und Geld • Python 3 als Teil des Relaunches besser kommunizierbar • Vorteile und Synergien mit anderen Kundenprojekten !11
  • 12. Onkopedia Plone Package ZODB XML -DIRECTOR PyFilesystem 0.5 webdav.fs eXist-DB P&P Plone Connector P&P Client Python Storage 3rd Party eigener Code Pyramid pp.server PDFreactor P&P Server Onkopedia Applikation PDF Generator P&P = Produce & Publish Architektur unter Plone 4 !12
  • 13. Portierung nach Python 3 • Add-Ons und Abhängigkeiten von unten nach oben im Abhängigkeitsgraphen portieren • minimaler Buildout mit jeweils einem Add-On • Ziel #1: Instanz startfähig bekommen • Abhängigkeiten auf Python 3 Kompatibilität prüfen • ggf. abhängige Module ersetzen • Importe anpassen händisch oder via six/modernize • händische Ersetzung bestimmte Code Konstrukte, z.B. • implements(ISomething) → @implementer(ISomething) • Tests: händisch und automatisiert (Unittests, Robotests falls vorhanden) !13
  • 14. Typisierung/Annotations • ZOPE URL Feldklassifizierer: • http://host/plone/foo?text:unicode=ÜÖÄ&number:int=123&price:float=2.39 • implizite Prüfung und implizite Umwandlung innerhalb von Zope • Python 3 Type Annotations • Typisierung von Funktionsparameter und Rückgabewerten • statische Analyse via mypy • optionale Runtime-Checks !14
  • 15. str/unicode vs bytes/str • Klare Trennung im Code zwischen Text und Bytes prüfen • insbesondere bei IO und Funktionssignaturen (Type Annotations) • Explizite Typprüfungen/Assertions geben Sicherheit •safe_unicode() vermeiden und eliminieren •Verwendung von encode() und decode() zur Konvertierung
 <class str> nach <class bytes> und umgekehrt fragwürdig Python 2 Python 3 Bytes/
 UTF-8 String „foo“ <class str> b“foo“ <class bytes> Text/Unicode u“üöäß“ <class unicode> “üöäß“ u“üöäß“ <class str> !15
  • 16. Onkopedia Plone Package ZODB XML -DIRECTOR PyFilesystem 0.5 webdav.fs eXist-DB P&P Plone Connector P&P Client Python Storage 3rd Party eigener Code Pyramid pp.server PDFreactor P&P Server Onkopedia Applikation PDF Generator P&P = Produce & Publish PDF Konvertierungsstack !16
  • 17. pyfilesystem/WebDAV (1/2) • Abstraktionslayer auf hierarchische Storages, Datenbank, Dateisysteme • WebDAV, S(FTP), RPCFS, OSFS, S3, ZIP, Memory, MultiFS, WrapFS, Dropbox, Onedrive, Github • fs < 1: Python 2.7 • fs >= 2: Python 2+3 kompatibel, kompletter Rewrite, API inkompatibel • Abstraktion nach unten über Storage-spezifische Treiber • Applikationscode ist unabhängig 
 vom Storage • WebDAV über build-in Driver handle = fs.opener(some_url) with handle.open('foo', 'w') as fp: fp.write(data) handle.listdir(dirname) handle.makedir('foo/bar/test') handle.removedir('foo/bar/test) handle.exists(some_filename) handle.isfile(some_name) handle.move(src, dst) handle.copy(src, dst) !17
  • 18. Verfügbare Treiber !18 Build-In Official 3rd party • AppFS 
 Filesystems for application data. • FTPFS 
 File Transfer Protocol. • MemoryFS 
 An in-memory filesystem. • MountFS 
 A virtual filesystem that can mount other filesystems. • MultiFS 
 A virtual filesystem that combines other filesystems. • OSFS 
 OS Filesystem (hard-drive). • TarFS 
 Read and write compressed Tar archives. • TempFS 
 Contains temporary data. • ZipFS 
 Read and write Zip files. • S3FS 
 Amazon S3 Filesystem. • WebDavFS 
 WebDav Filesystem. • fs.archive 
 Enhanced archive filesystems. • fs.dropboxfs 
 Dropbox Filesystem. • fs-gcsfs 
 Google Cloud Storage Filesystem. • fs.googledrivefs 
 Google Drive Filesystem. • fs.onedrivefs 
 Microsoft OneDrive Filesystem. • fs.smbfs 
 A filesystem running over the SMB protocol. • fs.sshfs 
 A filesystem running over the SSH protocol. • fs.youtube 
 A filesystem for accessing YouTube Videos and Playlists. • fs.dnla 
 A filesystem for accessing accessing DLNA Servers. • imapfs 
 Work in progress filesystem for imap (email) servers.
  • 19. pyfilesystem2/WebDAV (2/2) • Rewrite des WebDAV Treiber notwendig für Python 3 (fs.webdavfs) • externe Beauftragung • Qualitätssicherung über pyfilesystem2 Testsuite 
 (300 Tests) • Umfangreiche Testsuite gegen verschiedene WebDAV Server Implementierungen !19
  • 20. Onkopedia Plone Package ZODB XML -DIRECTOR PyFilesystem 0.5 webdav.fs eXist-DB P&P Plone Connector P&P Client Python Storage 3rd Party eigener Code Pyramid pp.server PDFreactor P&P Server Onkopedia Applikation PDF Generator P&P = Produce & Publish PDF Konvertierungsstack !20
  • 21. XML-Director Add-On • Integration von Dateisystemen Storages, XML DB etc. in Plone • „Mountpoint“ Konzept • erweiterbar über Behaviors • integriert mit Path Traversal • XML Layer für Validierung, Transformationen und Pipelines • Abhängigkeit von pyfilesystem 1/Python 2.7 !21
  • 22. XML-Director Connector • Reimplementierung von XML-Director • auf Basis von Python 3 (Backport auf 2.7) • Einsatz von pyfilesystem2/fs.webdavfs • schlankere, einfachere und leistungsfähigere Implementierung • lauffähig mit Plone 5.X (Python 2 + 3) !22
  • 23. Onkopedia Plone Package ZODB XML -DIRECTOR PyFilesystem 0.5 webdav.fs eXist-DB P&P Plone Connector P&P Client Python Storage 3rd Party eigener Code Pyramid pp.server PDFreactor P&P Server Onkopedia Applikation PDF Generator P&P = Produce & Publish PDF Konvertierungsstack !23
  • 24. PDF Konvertierungsstack • P&P Server • bereits Python 3 kompatibel seit vielen Jahren • Migration von Pyramid nach 
 Sanic Webframework • Plone Integration • P&P Plone Client Connector: einfach portiert • P&P Python Client Bindings: schon viele Jahre Python 3 kompatibel !24
  • 25. Onkopedia Plone Package ZODB XML -DIRECTOR PyFilesystem 0.5 webdav.fs eXist-DB P&P Plone Connector P&P Client Python Storage 3rd Party eigener Code Pyramid pp.server PDFreactor P&P Server Onkopedia Applikation PDF Generator P&P = Produce & Publish Portierung Onkopedia App !25
  • 26. Portierung Onkopedia App • Anpassung Importe • @implementer Dekorator • Anpassung an neue pyfilesystem API • diverse Anpassungen <bytes> vs. <str> • ca. 20% Rewrite des Codes wg. neuer Anforderungen für die Zukunft !26
  • 27. Onkopedia Plone Package (portiert) ZODB XML Connector/new PyFilesystem 2.0 fs.webdav FusionDB/Dateisystem P&P Plone Connector/new P&P Client Python/new Storage 3rd Party eigener Code Sanic pp.server/new PDFreactor P&P Server Onkopedia Applikation PDF Generator P&P = Produce & Publish Architektur unter Plone 5 !27
  • 28. Content Migration (1/2) • Plone in-place Migration vs. frischer Export/Import • Start mit einer sauberen Datenbank • Migration via plone.restapi erfolgreich in anderen Migrationsprojekten • Änderung an einigen Inhaltstypen • partielle Umstrukturierung !28
  • 29. Content Migration (2/2) Quellsystem Zielsysteme plone.restapi Provisioning APImigrate.py HTTP Export/Dump !29
  • 30. Sonstiges • kompletter Verzicht auf Resource Registries • eigene Minifizierung, Einbettung über ein Viewlet • Umstellung von ZServer auf WSGI/Waitress ohne Probleme • keine Unterschiede im Deployment zwischen Python 2 und Python 3 !30
  • 31. Qualitätssicherung • manuelles Testen, manuelles Testen, manuelles Testen • zusätzlich: Unit-Testing • Fuzzing mit Zufallsdaten/Texten (non-ASCII, Unicode) • Tests in eigenen Projekten („Eat your own dog food“) • Kundentests !31
  • 32. Back to the Future • Python 3.0 Release am 3.12.2008 • nach mehr als 10 Jahren können wir Python 3 (fast komplett) 
 endlich auch in Zope und Plone nutzen • Death to Python 2 • Plone 5.2/Python 3 Backend wird stabil und ready-for-production sein • Plone 5 Frontend weiterhin voller kleiner und großer Usability Bugs • Danke an das Plone Python 3 Porting Team !32