O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
Back to the Future - 

Python 3 und Plone 5.2
am Beispiel „Onkopedia“
Andreas Jung
www.zopyx.com - info@zopyx.com
Plone-Ta...
• DACH Leitlinienportal für Hämatologie und med. Onkologie
• Träger: Deutsche Gesellschaft für Hämatologie und Onkologie
•...
!3
!4
!5
!6
!7
Architektur
!8
Stand/Historie
•Version 1 (2010):
• Plone 4 mit ZOPYX Authoring Environment (Archetypes)
• HTML-basiertes Publishing (Open...
Migrationsziele
• Responsive Relaunch
• Ablösung m.onkopedia.com
• Umsetzung App Funktionalität auf mobile Version
• Plone...
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...
Onkopedia Plone Package
ZODB
XML -DIRECTOR
PyFilesystem 0.5
webdav.fs
eXist-DB
P&P Plone Connector
P&P Client Python
Stora...
Portierung nach Python 3
• Add-Ons und Abhängigkeiten von unten nach oben im Abhängigkeitsgraphen portieren
• minimaler Bu...
Typisierung/Annotations
• ZOPE URL Feldklassifizierer:
• http://host/plone/foo?text:unicode=ÜÖÄ&number:int=123&price:float...
str/unicode vs bytes/str
• Klare Trennung im Code zwischen Text und Bytes prüfen
• insbesondere bei IO und Funktionssignat...
Onkopedia Plone Package
ZODB
XML -DIRECTOR
PyFilesystem 0.5
webdav.fs
eXist-DB
P&P Plone Connector
P&P Client Python
Stora...
pyfilesystem/WebDAV (1/2)
• Abstraktionslayer auf hierarchische
Storages, Datenbank, Dateisysteme
• WebDAV, S(FTP), RPCFS,...
Verfügbare Treiber
!18
Build-In Official 3rd party
• AppFS 

Filesystems for application data.
• FTPFS 

File Transfer Pro...
pyfilesystem2/WebDAV (2/2)
• Rewrite des WebDAV Treiber
notwendig für Python 3
(fs.webdavfs)
• externe Beauftragung
• Qual...
Onkopedia Plone Package
ZODB
XML -DIRECTOR
PyFilesystem 0.5
webdav.fs
eXist-DB
P&P Plone Connector
P&P Client Python
Stora...
XML-Director Add-On
• Integration von Dateisystemen Storages, XML DB
etc. in Plone
• „Mountpoint“ Konzept
• erweiterbar üb...
XML-Director Connector
• Reimplementierung von XML-Director
• auf Basis von Python 3 (Backport auf 2.7)
• Einsatz von pyfi...
Onkopedia Plone Package
ZODB
XML -DIRECTOR
PyFilesystem 0.5
webdav.fs
eXist-DB
P&P Plone Connector
P&P Client Python
Stora...
PDF Konvertierungsstack
• P&P Server
• bereits Python 3 kompatibel seit vielen Jahren
• Migration von Pyramid nach 

Sanic...
Onkopedia Plone Package
ZODB
XML -DIRECTOR
PyFilesystem 0.5
webdav.fs
eXist-DB
P&P Plone Connector
P&P Client Python
Stora...
Portierung Onkopedia App
• Anpassung Importe
• @implementer Dekorator
• Anpassung an neue pyfilesystem API
• diverse Anpas...
Onkopedia Plone Package (portiert)
ZODB
XML Connector/new
PyFilesystem 2.0
fs.webdav
FusionDB/Dateisystem
P&P Plone Connec...
Content Migration (1/2)
• Plone in-place Migration vs. frischer Export/Import
• Start mit einer sauberen Datenbank
• Migra...
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 v...
Qualitätssicherung
• manuelles Testen, manuelles Testen, manuelles Testen
• zusätzlich: Unit-Testing
• Fuzzing mit Zufalls...
Back to the Future
• Python 3.0 Release am 3.12.2008
• nach mehr als 10 Jahren können wir Python 3 (fast komplett) 

endli...
Próximos SlideShares
Carregando em…5
×

de

Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 1 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 2 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 3 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 4 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 5 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 6 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 7 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 8 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 9 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 10 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 11 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 12 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 13 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 14 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 15 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 16 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 17 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 18 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 19 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 20 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 21 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 22 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 23 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 24 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 25 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 26 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 27 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 28 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 29 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 30 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 31 Back to the future - Plone 5.2 und Python 3 Migration am Beispiel Onkopedia Slide 32
Próximos SlideShares
What to Upload to SlideShare
Avançar
Transfira para ler offline e ver em ecrã inteiro.

0 gostaram

Compartilhar

Baixar para ler offline

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

Baixar para ler offline

Beispielhaft Migration eines Plone Portals auf Plone 5.2 und Python 3 am Beispiel Onkopedia

  • Seja a primeira pessoa a gostar disto

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

  1. 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. 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. !3
  4. 4. !4
  5. 5. !5
  6. 6. !6
  7. 7. !7
  8. 8. Architektur !8
  9. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 29. Content Migration (2/2) Quellsystem Zielsysteme plone.restapi Provisioning APImigrate.py HTTP Export/Dump !29
  30. 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. 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. 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

Beispielhaft Migration eines Plone Portals auf Plone 5.2 und Python 3 am Beispiel Onkopedia

Vistos

Vistos totais

853

No Slideshare

0

De incorporações

0

Número de incorporações

131

Ações

Baixados

2

Compartilhados

0

Comentários

0

Curtir

0

×