SlideShare ist ein Scribd-Unternehmen logo
1 von 36
3. Deutsche
Python-Konferenz
Köln 2013

Schlangenhochzeit
in der Wolke
Python / Pyramid
auf Googles Appengine

Jens W. Klein
jk@kleinundpartner.at
http://kleinundpartner.at
16.10.2013
1 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Quelle: Internet
http://www.focus.de/fotos/bei-einer-symbolischen-schlangenhochzeit-hoffen-bewohner-eines_mid_809519.html

2 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
3 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
4 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
5 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
6 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
●

Startup Unternehmen mit Sitz in Innsbruck

●

Location based Games

●

gefördert durch die FFG (Östereichische
Forschungs-Förderungs-Gesellschaft) von
1/2012 bis 6/2013

●

4 Gesellschafter

●

KUP: Gesellschafter seit 11/2012

●

KUP-Aufgaben: Projektmanagement,
Development Support, Portalumsetzung
7 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
8 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Anforderungen
1
●

●

Entwicklung eines Mixed Reality Media Formats
für Location based Games.
Entwicklung eines MRM-Players für
Smartphones
–
–

HTML5/Javascript basiert

–

●

100% Offline-fähig
Native App stellt nur Laufzeitumgebung zur
Verfügung

Entwicklung eines Editors für das MRM-Format

9 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Anforderungen
2
●

Entwicklung eines Portals für eine wachsende
Locandy-Community für
–
–

●

Spieler und Autoren,
kommerzielle Kunden und Werbetreibende.

das Portal soll
–

skalierbar sein,

–

verfügbar sein und

–

kaum Personalaufwand für Hosting verursachen.

10 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Anatomie
Suche

Appengine
Google Cloud

Android/ iOS (native)

Download
PORTAL

APP
Spielergebnis

Browser
HTML5
Javascript

Apache Cordova Webview
+ Plugins

Editor

Player
Spiel

Player
Vorschau

11 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
12 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Google Appengine
1: Google sagt
●

●

●

wird bei größter Belastung und hohen
Datenmengen zuverlässig ausgeführt wird.
Automatische Skalierung und Lastenausgleich
Eine lokale Entwicklungsumgebung mit allen
Funktionen, die Google App Engine auf Ihrem
Computer simuliert

●

Aufgaben-Queue außerhalb einer Webanfrage

●

Cron-Job-ähnliche Zeit/ Intervall Aufgaben

●

https://developers.google.com/appengine/docs/
whatisgoogleappengine?hl=de
13 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Google Appengine
2
●

Cloud Plattform von Google seit 2008

●

Applikationen laufen in einer Sandkiste

●

Programmiersprachen:
–

Python - erste unterstützte Sprache

–

Java - häufigst genutzte Sprache

–

Go - Google Eigenentwicklung, Nische

–

PHP - erst seit wenigen Monaten

14 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Google Appengine
3
●

eingeschränkter Funktionsumfang der Sprache
–

–

Laden von externen URLs über eigene API/Dienst

–

●

Mail muss über eigene API/Dienst verschickt
werden

–

●

keine Egg-Unterstützung, Sockets, Tempfiles,
Dateisystem nur RO

keine Python C-Erweiterungen möglich

Blobstorage/ Google Cloudstorage erfordert
spezielle Handhabung von Binärdaten
eigene Objekt-Datenbank
15 von 36

...uvm.
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
16 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid
1
●

FOSS Python Webframework

●

Ausgewähltes Bestes aus der Welt von
–
–

Django,

–

●

Zope,

–

●

Pylons,

und einigen anderen Inspirationen.

Der Kern ist Minimal, nur wenige Vorgaben,
dafür viele Add-Ons um verschiedene Ziele zu
erreichen.
17 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid
2
●

Die Qual der Wahl
–

Urlmatch oder Traversal? Oder beides?

–

Datenbank relational oder objektorientiert?

–

Mako, Chameleon-ZPT, Jinja oder was als
Template-Sprache?

–

Welche Art von Authentifizierung und
Authorisierung?

–

Strukturierung des Projektes nach Layern, nach
Fachklassen oder wie sonst?

–

...?
18 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid
3
●

●

●

●

●

Pyramid ist komplett Komponenten basiert,
verwendet Zope Kompenenten Archiktektur,
aber versteckt sie für den Otto-NormalProgrammmierer.
Es gibt viele fertige Komponenten, die einem
das Leben leicht machen,
und es werden ständig mehr!
Hinter Pyramid steht eine noch kleine aber sehr
lebendige Community.
19 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
20 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Hochzeit
Pyramid mit Appengine
●

Pfarrer ist zc.buildout

●

collective.recipe.appengine spielt die Musik
–

noch unreleased, code auf github

–

Fork von eingeschlafenem Projekt
appfy.recipe.appengine

–

wir lieben Pull-Requests!

–

automatische Installion von Appengine SDK, Tools
und Development Server,

–

mixt aus Eggs eine Baumstruktur.

21 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
├──
│  
│  
│  
│  
│  
│  
│  
├──
├──
├──
├──
└──
  
  
  
  
  
  
  

app
├──
├──
├──
├──
├──
└──

Pyramid mit
zc.buildout auf appengine
app.yaml
1: Struktur vor buildout
gaefixes.py

main.py
pkg_resources.py
Python Wurzel
settings.yaml
aus Sicht der Appengine
static
├── [... css, png, jpg, ...]
bootstrap.py
buildout.cfg
versions.cfg
ab hier Egg-Struktur
gaetools.cfg
source
└── example_app
├── setup.cfg
ab hier example_app,
├── setup.py
Wurzel aus Sicht
└── src
von Python
└── example_app
├── __init__.py
├── [...] 22 von 36
Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid mit
zc.buildout auf appengine
2: Beispiel Code

Aller Code und Buildout lauffähig auf
http://github.com/jensens/pyramid-gae-tutorial

23 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid mit
zc.buildout auf appengine
3: buildout laufen lassen
●

Python 2.7

●

Virtual-Env größer Version 1.9

$ cd path/to/buildout
$ virtualenv --no-site-packages 
--no-setuptools --clear .
$ ./bin/python2.7 bootstrap.py
$ ./bin/buildout

24 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid mit
zc.buildout auf appengine
4: nach dem Lauf
●

●

●

●

●

./bin enthält dev_appserver und viele andere
tools, jedoch nicht alle benötigt in der
Appengine,
./app/distlib enthält Eggs in Baum aufgelöst
./app/example_app ist symbolischer Link auf
die Python Wurzel der Beispiel App,
./parts/appengine_sdk enthält das offizielle
Google Appengine SDK,
./var ist angelegt, dort wird die Datenbank der
Entwicklungsumgebung abgelegt.
25 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Pyramid mit
zc.buildout auf appengine
5: dev_appserver starten
●

●

●

●

./bin/dev_appserver startet den
Entwicklungsserver
die App läuft per default auf
http://localhost:8080
die Admin-Benutzeroberfläche läuft auf
http://localhost:9000
die Einstellungen für den dev_appserver werden
aus der Datei ./gaetools.cfg eingelesen.

26 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
27 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Kommunikation in der Ehe
GAEFixes
●

Fixes/ Monkeypatches sind leider tw. notwendig

●

müssen als erstes im main.py geladen werden

●

sys.path anpassen

●

●

●

pkg_resources im Entwicklermodus: Appengine
import_hook registrieren
chameleon zpt im Entwicklermodus: Patchen
des Debug Lade-Modus, da keine Tempfiles
erlaubt sind.
zudem evtl. Library spezifische Hacks.
28 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Initialisierung der
Pyramid App
●

●

●

●

●

settings.yaml enthält Pyramid- und AppEinstellungen Google-mäßig als YAML
(normalerweise in Pyramid im INI-Format),
main.py wie für normale WSGI-Anwendungen
und stellt hier Pyramid application Objekt zur
Verfügung,
main.application ist in appengine config file
app.yaml für alle Anfragen registriert,
statische Ressourcen können direkt via
Appengine Routing ausgeliefert werden.
29 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
30 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Debugging Probleme und
der Wert des Testens
●

pdb funktioniert im dev_appserver nicht!

●

print funktioniert nicht (aber logging geht),

●

●

●

scheinbar gibt es Remote-Debugging hooks
-> noch nicht ausprobiert,
-> kompliziert einzurichten,
-> nur für Eclipse, evtl. andere IDEs möglich;
pdb in Tests funktioniert, ipdb (ipython)
funktionert in Tests.
interlude interaktive Konsole für Doctests
funktioniert (inkl. ipython).
31 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Test getriebene
Entwicklung
●

Appengine bietet Funktionen um verschiedene
Teile der Laufzeitumgebung zu starten und
stoppen (Datastore, Blobstore, Memcache usw.),

●

Test/Testumgebung muss diese verwenden,

●

Nose-Tests: nosegae ! -> nicht lauffähig

●

eigenen Testrunner geschrieben, zu unflexibel

●

●

schließlich zope.testrunner mit Appengine
verheiratet
dann plone.testing Test-Layers integriert
32 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Tests in Schichten
plone.testing + zope.testrunner
●

●

●

●

●

Layers werden für Test Fixtures (Test
Ausstattungen) genutzt, die von mehreren TestFällen gemeinsam genutzt werden,
vereinfacht/ vereinheitlicht Setup/ Teardown
Aufteilung z.B. pure Python Tests, Tests mit
Datenbank, Tests gegen Webserver, ...,
bzw.: Unit-Test, Functional-Tests und IntegrationTests,
bei sehr vielen Tests schnellere Ausführung.
33 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Test-Beispiel
1: mit Datenbank, ohne Webtest
creating a first node::
>>> from example_app import models
>>> node = models.create_node('test1',
...
'Test One', 'This is a first test.')
>>> node
TreeModel(key=Key('TreeModel', 'test1'),
body=u'This is a first test.', title=u'Test One')

trying to create a node that already exists raises ValueError::
>>> node = models.create_node('test1', 'X', 'X')
Traceback (most recent call last):
...
ValueError: node with name test1 already exists

34 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
Test-Beispiel
2: mit Datenbank und Webtest
>>> node = models.create_node('test1', 'Test One',
...
'This is a first test.')
>>> node
TreeModel(key=Key('TreeModel', 'test1'),
body=u'This is a first test.', title=u'Test One')

>>> response = layer.webtest.get('/test1')
>>> 'Test One' in response
True
>>> 'This is a first test.' in response
True

>>> response = layer.webtest.get('/nonexistent',
...
status='404', expect_errors=True)
>>> response.status
'404 Not Found'
35 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.
36 von 36

Text: Creative Commons Namensnennung-Keine
kommerzielle Nutzung- Keine Bearbeitung 3.0
Österreich Lizenz.

Weitere ähnliche Inhalte

Andere mochten auch

Retículas para pantalla
Retículas para pantallaRetículas para pantalla
Retículas para pantallacamilolinares23
 
Share point server 2007
Share point server 2007Share point server 2007
Share point server 2007Cindy Jimenez
 
pourquoi-programme-formation-tourisme-limousin-20130404
pourquoi-programme-formation-tourisme-limousin-20130404pourquoi-programme-formation-tourisme-limousin-20130404
pourquoi-programme-formation-tourisme-limousin-20130404Florent Guitard
 
Arbolado Urbano en la Legislación Forestal Latinoamericana
Arbolado Urbano en la Legislación Forestal LatinoamericanaArbolado Urbano en la Legislación Forestal Latinoamericana
Arbolado Urbano en la Legislación Forestal LatinoamericanaSantiago JM Del Pozo Donoso
 
Die 5 Ebenen Barriererfreier Web Entwicklung
Die 5 Ebenen Barriererfreier Web EntwicklungDie 5 Ebenen Barriererfreier Web Entwicklung
Die 5 Ebenen Barriererfreier Web EntwicklungDirk Ginader
 
Wer ist ein Heiliger?
Wer ist ein Heiliger?Wer ist ein Heiliger?
Wer ist ein Heiliger?SSRF Inc.
 
Présentation Yahoo pipes
Présentation Yahoo pipesPrésentation Yahoo pipes
Présentation Yahoo pipesVoyelle Voyelle
 
Mes vacances à bahamas!
Mes vacances à bahamas!Mes vacances à bahamas!
Mes vacances à bahamas!akkornack
 
Contrato Ilegal Portovelo Prov del Oro por Municipio
Contrato Ilegal Portovelo Prov del Oro por MunicipioContrato Ilegal Portovelo Prov del Oro por Municipio
Contrato Ilegal Portovelo Prov del Oro por Municipiomarcosgabo
 
Haute couture
Haute coutureHaute couture
Haute coutureM-droid
 
Escuela sitio en construcción
Escuela sitio en construcciónEscuela sitio en construcción
Escuela sitio en construcciónEnrique Moscetta
 
Association Sorbonne Innovation & Technologie
Association Sorbonne Innovation & TechnologieAssociation Sorbonne Innovation & Technologie
Association Sorbonne Innovation & TechnologieSorbonne Imt
 

Andere mochten auch (20)

Retículas para pantalla
Retículas para pantallaRetículas para pantalla
Retículas para pantalla
 
Smile graphies
Smile graphiesSmile graphies
Smile graphies
 
Share point server 2007
Share point server 2007Share point server 2007
Share point server 2007
 
Das „Who is Who“ der Schweizer Luxushotellerie 2013 / 2014
Das „Who is Who“ der Schweizer Luxushotellerie 2013 / 2014Das „Who is Who“ der Schweizer Luxushotellerie 2013 / 2014
Das „Who is Who“ der Schweizer Luxushotellerie 2013 / 2014
 
pourquoi-programme-formation-tourisme-limousin-20130404
pourquoi-programme-formation-tourisme-limousin-20130404pourquoi-programme-formation-tourisme-limousin-20130404
pourquoi-programme-formation-tourisme-limousin-20130404
 
e-business
e-businesse-business
e-business
 
Arbolado Urbano en la Legislación Forestal Latinoamericana
Arbolado Urbano en la Legislación Forestal LatinoamericanaArbolado Urbano en la Legislación Forestal Latinoamericana
Arbolado Urbano en la Legislación Forestal Latinoamericana
 
Die 5 Ebenen Barriererfreier Web Entwicklung
Die 5 Ebenen Barriererfreier Web EntwicklungDie 5 Ebenen Barriererfreier Web Entwicklung
Die 5 Ebenen Barriererfreier Web Entwicklung
 
Caso de estudio amortiguadores gabriel
Caso de estudio amortiguadores gabrielCaso de estudio amortiguadores gabriel
Caso de estudio amortiguadores gabriel
 
Wer ist ein Heiliger?
Wer ist ein Heiliger?Wer ist ein Heiliger?
Wer ist ein Heiliger?
 
Présentation Yahoo pipes
Présentation Yahoo pipesPrésentation Yahoo pipes
Présentation Yahoo pipes
 
Mes vacances à bahamas!
Mes vacances à bahamas!Mes vacances à bahamas!
Mes vacances à bahamas!
 
Contrato Ilegal Portovelo Prov del Oro por Municipio
Contrato Ilegal Portovelo Prov del Oro por MunicipioContrato Ilegal Portovelo Prov del Oro por Municipio
Contrato Ilegal Portovelo Prov del Oro por Municipio
 
Presentation1
Presentation1Presentation1
Presentation1
 
Haute couture
Haute coutureHaute couture
Haute couture
 
PAN
PANPAN
PAN
 
Escuela sitio en construcción
Escuela sitio en construcciónEscuela sitio en construcción
Escuela sitio en construcción
 
Workshop Social Media Week - 10 Tipps, wie Sie Enterprise 2.0 garantiert zum ...
Workshop Social Media Week - 10 Tipps, wie Sie Enterprise 2.0 garantiert zum ...Workshop Social Media Week - 10 Tipps, wie Sie Enterprise 2.0 garantiert zum ...
Workshop Social Media Week - 10 Tipps, wie Sie Enterprise 2.0 garantiert zum ...
 
ICT4D
ICT4DICT4D
ICT4D
 
Association Sorbonne Innovation & Technologie
Association Sorbonne Innovation & TechnologieAssociation Sorbonne Innovation & Technologie
Association Sorbonne Innovation & Technologie
 

Ähnlich wie Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine

WhereGroup Firmenprofil
WhereGroup FirmenprofilWhereGroup Firmenprofil
WhereGroup FirmenprofilArnulf Christl
 
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018André Krämer
 
Software-Entwicklung, Entwicklung von Handy-Apps, Technologietrends
Software-Entwicklung, Entwicklung von Handy-Apps, TechnologietrendsSoftware-Entwicklung, Entwicklung von Handy-Apps, Technologietrends
Software-Entwicklung, Entwicklung von Handy-Apps, TechnologietrendsAndreas Bruns
 
OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...
OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...
OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...NETWAYS
 
Die wichtigsten Technologien für die Entwicklung von Webanwendungen
Die wichtigsten Technologien für die Entwicklung von WebanwendungenDie wichtigsten Technologien für die Entwicklung von Webanwendungen
Die wichtigsten Technologien für die Entwicklung von WebanwendungenYUHIRO
 
DevOps: Automatisieren, was wir predigen
DevOps: Automatisieren, was wir predigenDevOps: Automatisieren, was wir predigen
DevOps: Automatisieren, was wir predigenFotiosKaramitsos
 
Django nutshell overview
Django nutshell overviewDjango nutshell overview
Django nutshell overviewschacki
 
Ueberlegungen Projektmanagement Web Applications
Ueberlegungen Projektmanagement Web ApplicationsUeberlegungen Projektmanagement Web Applications
Ueberlegungen Projektmanagement Web ApplicationsGünther Haslbeck
 
Django trifft Flutter
Django trifft FlutterDjango trifft Flutter
Django trifft Flutterroskakori
 
GitLab als alternative Entwicklungsplattform zu Github.com
GitLab als alternative Entwicklungsplattform zu Github.comGitLab als alternative Entwicklungsplattform zu Github.com
GitLab als alternative Entwicklungsplattform zu Github.comB1 Systems GmbH
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenHendrik Lösch
 
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrGunther Pippèrr
 
TYPO3 Usergroup Dresden - TYPO3 & Composer
TYPO3 Usergroup Dresden - TYPO3 & ComposerTYPO3 Usergroup Dresden - TYPO3 & Composer
TYPO3 Usergroup Dresden - TYPO3 & ComposerAxel Böswetter
 
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzierenPlattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzierenteam-WIBU
 
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenGewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenBjoern Reinhold
 
CSI: WP - Dem Windows Phone auf der Spur, Internetspecial: SDK & Development-...
CSI: WP - Dem Windows Phone auf der Spur, Internetspecial: SDK & Development-...CSI: WP - Dem Windows Phone auf der Spur, Internetspecial: SDK & Development-...
CSI: WP - Dem Windows Phone auf der Spur, Internetspecial: SDK & Development-...Gordon Breuer
 
Neues aus der TYPO3 Welt 10/2018
Neues aus der TYPO3 Welt 10/2018Neues aus der TYPO3 Welt 10/2018
Neues aus der TYPO3 Welt 10/2018Kai Unterberg
 
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
2008 - Gewinnung von OPEN SOURCE Techniken für junge UnternehmenBjoern Reinhold
 
Docker for Python Development
Docker for Python DevelopmentDocker for Python Development
Docker for Python DevelopmentMartin Christen
 

Ähnlich wie Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine (20)

WhereGroup Firmenprofil
WhereGroup FirmenprofilWhereGroup Firmenprofil
WhereGroup Firmenprofil
 
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
 
Software-Entwicklung, Entwicklung von Handy-Apps, Technologietrends
Software-Entwicklung, Entwicklung von Handy-Apps, TechnologietrendsSoftware-Entwicklung, Entwicklung von Handy-Apps, Technologietrends
Software-Entwicklung, Entwicklung von Handy-Apps, Technologietrends
 
OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...
OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...
OSMC 2010 | Rechtliche Fallstricke beim Einsatz von eigener und OSS Drittsoft...
 
Das ist Open Source
Das ist Open SourceDas ist Open Source
Das ist Open Source
 
Die wichtigsten Technologien für die Entwicklung von Webanwendungen
Die wichtigsten Technologien für die Entwicklung von WebanwendungenDie wichtigsten Technologien für die Entwicklung von Webanwendungen
Die wichtigsten Technologien für die Entwicklung von Webanwendungen
 
DevOps: Automatisieren, was wir predigen
DevOps: Automatisieren, was wir predigenDevOps: Automatisieren, was wir predigen
DevOps: Automatisieren, was wir predigen
 
Django nutshell overview
Django nutshell overviewDjango nutshell overview
Django nutshell overview
 
Ueberlegungen Projektmanagement Web Applications
Ueberlegungen Projektmanagement Web ApplicationsUeberlegungen Projektmanagement Web Applications
Ueberlegungen Projektmanagement Web Applications
 
Django trifft Flutter
Django trifft FlutterDjango trifft Flutter
Django trifft Flutter
 
GitLab als alternative Entwicklungsplattform zu Github.com
GitLab als alternative Entwicklungsplattform zu Github.comGitLab als alternative Entwicklungsplattform zu Github.com
GitLab als alternative Entwicklungsplattform zu Github.com
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf Steroiden
 
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
 
TYPO3 Usergroup Dresden - TYPO3 & Composer
TYPO3 Usergroup Dresden - TYPO3 & ComposerTYPO3 Usergroup Dresden - TYPO3 & Composer
TYPO3 Usergroup Dresden - TYPO3 & Composer
 
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzierenPlattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
Plattformunabhängige Anwendungen mit Python, PHP und JavaScript lizenzieren
 
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenGewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
 
CSI: WP - Dem Windows Phone auf der Spur, Internetspecial: SDK & Development-...
CSI: WP - Dem Windows Phone auf der Spur, Internetspecial: SDK & Development-...CSI: WP - Dem Windows Phone auf der Spur, Internetspecial: SDK & Development-...
CSI: WP - Dem Windows Phone auf der Spur, Internetspecial: SDK & Development-...
 
Neues aus der TYPO3 Welt 10/2018
Neues aus der TYPO3 Welt 10/2018Neues aus der TYPO3 Welt 10/2018
Neues aus der TYPO3 Welt 10/2018
 
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
 
Docker for Python Development
Docker for Python DevelopmentDocker for Python Development
Docker for Python Development
 

Mehr von Jens Klein

RelStorage Plone Zope RDB Storage Backend
RelStorage Plone Zope RDB Storage BackendRelStorage Plone Zope RDB Storage Backend
RelStorage Plone Zope RDB Storage BackendJens Klein
 
Plone Performance, Profiling, Power-Consumption
Plone Performance, Profiling, Power-ConsumptionPlone Performance, Profiling, Power-Consumption
Plone Performance, Profiling, Power-ConsumptionJens Klein
 
RelStorage - an alternative ZODB Backend
RelStorage - an alternative ZODB BackendRelStorage - an alternative ZODB Backend
RelStorage - an alternative ZODB BackendJens Klein
 
Big Fat FastPlone - Scale up, speed up
Big Fat FastPlone - Scale up, speed upBig Fat FastPlone - Scale up, speed up
Big Fat FastPlone - Scale up, speed upJens Klein
 
YAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne KopfschmerzenYAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne KopfschmerzenJens Klein
 
FISE Integration with Python and Plone
FISE Integration with Python and PloneFISE Integration with Python and Plone
FISE Integration with Python and PloneJens Klein
 
Plone is so semantic, isn't it?
Plone is so semantic,  isn't it?Plone is so semantic,  isn't it?
Plone is so semantic, isn't it?Jens Klein
 
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009Jens Klein
 
cornerstone.soup Lighning Talk on Plone Conference 2009
cornerstone.soup Lighning Talk on Plone Conference 2009cornerstone.soup Lighning Talk on Plone Conference 2009
cornerstone.soup Lighning Talk on Plone Conference 2009Jens Klein
 
Was ist Plone?
Was ist Plone?Was ist Plone?
Was ist Plone?Jens Klein
 
Projekte mit Plone
Projekte mit PloneProjekte mit Plone
Projekte mit PloneJens Klein
 
Plone - Community, Entwicklung, Support
Plone - Community, Entwicklung, SupportPlone - Community, Entwicklung, Support
Plone - Community, Entwicklung, SupportJens Klein
 
Plone Conference 2007 Naples: Lightning Talk Daidalos
Plone Conference 2007 Naples: Lightning Talk DaidalosPlone Conference 2007 Naples: Lightning Talk Daidalos
Plone Conference 2007 Naples: Lightning Talk DaidalosJens Klein
 

Mehr von Jens Klein (13)

RelStorage Plone Zope RDB Storage Backend
RelStorage Plone Zope RDB Storage BackendRelStorage Plone Zope RDB Storage Backend
RelStorage Plone Zope RDB Storage Backend
 
Plone Performance, Profiling, Power-Consumption
Plone Performance, Profiling, Power-ConsumptionPlone Performance, Profiling, Power-Consumption
Plone Performance, Profiling, Power-Consumption
 
RelStorage - an alternative ZODB Backend
RelStorage - an alternative ZODB BackendRelStorage - an alternative ZODB Backend
RelStorage - an alternative ZODB Backend
 
Big Fat FastPlone - Scale up, speed up
Big Fat FastPlone - Scale up, speed upBig Fat FastPlone - Scale up, speed up
Big Fat FastPlone - Scale up, speed up
 
YAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne KopfschmerzenYAFOWIL - Webformulare in Python ohne Kopfschmerzen
YAFOWIL - Webformulare in Python ohne Kopfschmerzen
 
FISE Integration with Python and Plone
FISE Integration with Python and PloneFISE Integration with Python and Plone
FISE Integration with Python and Plone
 
Plone is so semantic, isn't it?
Plone is so semantic,  isn't it?Plone is so semantic,  isn't it?
Plone is so semantic, isn't it?
 
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009
AGX - Tree Transformations with Python - Lightning Talk at Plone Conference 2009
 
cornerstone.soup Lighning Talk on Plone Conference 2009
cornerstone.soup Lighning Talk on Plone Conference 2009cornerstone.soup Lighning Talk on Plone Conference 2009
cornerstone.soup Lighning Talk on Plone Conference 2009
 
Was ist Plone?
Was ist Plone?Was ist Plone?
Was ist Plone?
 
Projekte mit Plone
Projekte mit PloneProjekte mit Plone
Projekte mit Plone
 
Plone - Community, Entwicklung, Support
Plone - Community, Entwicklung, SupportPlone - Community, Entwicklung, Support
Plone - Community, Entwicklung, Support
 
Plone Conference 2007 Naples: Lightning Talk Daidalos
Plone Conference 2007 Naples: Lightning Talk DaidalosPlone Conference 2007 Naples: Lightning Talk Daidalos
Plone Conference 2007 Naples: Lightning Talk Daidalos
 

Schlangenhochzeit in-der Wolke - Pyramid auf Google Appengine

  • 1. 3. Deutsche Python-Konferenz Köln 2013 Schlangenhochzeit in der Wolke Python / Pyramid auf Googles Appengine Jens W. Klein jk@kleinundpartner.at http://kleinundpartner.at 16.10.2013 1 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 2. Quelle: Internet http://www.focus.de/fotos/bei-einer-symbolischen-schlangenhochzeit-hoffen-bewohner-eines_mid_809519.html 2 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 3. 3 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 4. 4 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 5. 5 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 6. 6 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 7. ● Startup Unternehmen mit Sitz in Innsbruck ● Location based Games ● gefördert durch die FFG (Östereichische Forschungs-Förderungs-Gesellschaft) von 1/2012 bis 6/2013 ● 4 Gesellschafter ● KUP: Gesellschafter seit 11/2012 ● KUP-Aufgaben: Projektmanagement, Development Support, Portalumsetzung 7 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 8. 8 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 9. Anforderungen 1 ● ● Entwicklung eines Mixed Reality Media Formats für Location based Games. Entwicklung eines MRM-Players für Smartphones – – HTML5/Javascript basiert – ● 100% Offline-fähig Native App stellt nur Laufzeitumgebung zur Verfügung Entwicklung eines Editors für das MRM-Format 9 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 10. Anforderungen 2 ● Entwicklung eines Portals für eine wachsende Locandy-Community für – – ● Spieler und Autoren, kommerzielle Kunden und Werbetreibende. das Portal soll – skalierbar sein, – verfügbar sein und – kaum Personalaufwand für Hosting verursachen. 10 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 11. Anatomie Suche Appengine Google Cloud Android/ iOS (native) Download PORTAL APP Spielergebnis Browser HTML5 Javascript Apache Cordova Webview + Plugins Editor Player Spiel Player Vorschau 11 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 12. 12 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 13. Google Appengine 1: Google sagt ● ● ● wird bei größter Belastung und hohen Datenmengen zuverlässig ausgeführt wird. Automatische Skalierung und Lastenausgleich Eine lokale Entwicklungsumgebung mit allen Funktionen, die Google App Engine auf Ihrem Computer simuliert ● Aufgaben-Queue außerhalb einer Webanfrage ● Cron-Job-ähnliche Zeit/ Intervall Aufgaben ● https://developers.google.com/appengine/docs/ whatisgoogleappengine?hl=de 13 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 14. Google Appengine 2 ● Cloud Plattform von Google seit 2008 ● Applikationen laufen in einer Sandkiste ● Programmiersprachen: – Python - erste unterstützte Sprache – Java - häufigst genutzte Sprache – Go - Google Eigenentwicklung, Nische – PHP - erst seit wenigen Monaten 14 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 15. Google Appengine 3 ● eingeschränkter Funktionsumfang der Sprache – – Laden von externen URLs über eigene API/Dienst – ● Mail muss über eigene API/Dienst verschickt werden – ● keine Egg-Unterstützung, Sockets, Tempfiles, Dateisystem nur RO keine Python C-Erweiterungen möglich Blobstorage/ Google Cloudstorage erfordert spezielle Handhabung von Binärdaten eigene Objekt-Datenbank 15 von 36 ...uvm. Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 16. 16 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 17. Pyramid 1 ● FOSS Python Webframework ● Ausgewähltes Bestes aus der Welt von – – Django, – ● Zope, – ● Pylons, und einigen anderen Inspirationen. Der Kern ist Minimal, nur wenige Vorgaben, dafür viele Add-Ons um verschiedene Ziele zu erreichen. 17 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 18. Pyramid 2 ● Die Qual der Wahl – Urlmatch oder Traversal? Oder beides? – Datenbank relational oder objektorientiert? – Mako, Chameleon-ZPT, Jinja oder was als Template-Sprache? – Welche Art von Authentifizierung und Authorisierung? – Strukturierung des Projektes nach Layern, nach Fachklassen oder wie sonst? – ...? 18 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 19. Pyramid 3 ● ● ● ● ● Pyramid ist komplett Komponenten basiert, verwendet Zope Kompenenten Archiktektur, aber versteckt sie für den Otto-NormalProgrammmierer. Es gibt viele fertige Komponenten, die einem das Leben leicht machen, und es werden ständig mehr! Hinter Pyramid steht eine noch kleine aber sehr lebendige Community. 19 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 20. 20 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 21. Hochzeit Pyramid mit Appengine ● Pfarrer ist zc.buildout ● collective.recipe.appengine spielt die Musik – noch unreleased, code auf github – Fork von eingeschlafenem Projekt appfy.recipe.appengine – wir lieben Pull-Requests! – automatische Installion von Appengine SDK, Tools und Development Server, – mixt aus Eggs eine Baumstruktur. 21 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 22. ├── │   │   │   │   │   │   │   ├── ├── ├── ├── └──                      app ├── ├── ├── ├── ├── └── Pyramid mit zc.buildout auf appengine app.yaml 1: Struktur vor buildout gaefixes.py main.py pkg_resources.py Python Wurzel settings.yaml aus Sicht der Appengine static ├── [... css, png, jpg, ...] bootstrap.py buildout.cfg versions.cfg ab hier Egg-Struktur gaetools.cfg source └── example_app ├── setup.cfg ab hier example_app, ├── setup.py Wurzel aus Sicht └── src von Python └── example_app ├── __init__.py ├── [...] 22 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 23. Pyramid mit zc.buildout auf appengine 2: Beispiel Code Aller Code und Buildout lauffähig auf http://github.com/jensens/pyramid-gae-tutorial 23 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 24. Pyramid mit zc.buildout auf appengine 3: buildout laufen lassen ● Python 2.7 ● Virtual-Env größer Version 1.9 $ cd path/to/buildout $ virtualenv --no-site-packages --no-setuptools --clear . $ ./bin/python2.7 bootstrap.py $ ./bin/buildout 24 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 25. Pyramid mit zc.buildout auf appengine 4: nach dem Lauf ● ● ● ● ● ./bin enthält dev_appserver und viele andere tools, jedoch nicht alle benötigt in der Appengine, ./app/distlib enthält Eggs in Baum aufgelöst ./app/example_app ist symbolischer Link auf die Python Wurzel der Beispiel App, ./parts/appengine_sdk enthält das offizielle Google Appengine SDK, ./var ist angelegt, dort wird die Datenbank der Entwicklungsumgebung abgelegt. 25 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 26. Pyramid mit zc.buildout auf appengine 5: dev_appserver starten ● ● ● ● ./bin/dev_appserver startet den Entwicklungsserver die App läuft per default auf http://localhost:8080 die Admin-Benutzeroberfläche läuft auf http://localhost:9000 die Einstellungen für den dev_appserver werden aus der Datei ./gaetools.cfg eingelesen. 26 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 27. 27 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 28. Kommunikation in der Ehe GAEFixes ● Fixes/ Monkeypatches sind leider tw. notwendig ● müssen als erstes im main.py geladen werden ● sys.path anpassen ● ● ● pkg_resources im Entwicklermodus: Appengine import_hook registrieren chameleon zpt im Entwicklermodus: Patchen des Debug Lade-Modus, da keine Tempfiles erlaubt sind. zudem evtl. Library spezifische Hacks. 28 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 29. Initialisierung der Pyramid App ● ● ● ● ● settings.yaml enthält Pyramid- und AppEinstellungen Google-mäßig als YAML (normalerweise in Pyramid im INI-Format), main.py wie für normale WSGI-Anwendungen und stellt hier Pyramid application Objekt zur Verfügung, main.application ist in appengine config file app.yaml für alle Anfragen registriert, statische Ressourcen können direkt via Appengine Routing ausgeliefert werden. 29 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 30. 30 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 31. Debugging Probleme und der Wert des Testens ● pdb funktioniert im dev_appserver nicht! ● print funktioniert nicht (aber logging geht), ● ● ● scheinbar gibt es Remote-Debugging hooks -> noch nicht ausprobiert, -> kompliziert einzurichten, -> nur für Eclipse, evtl. andere IDEs möglich; pdb in Tests funktioniert, ipdb (ipython) funktionert in Tests. interlude interaktive Konsole für Doctests funktioniert (inkl. ipython). 31 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 32. Test getriebene Entwicklung ● Appengine bietet Funktionen um verschiedene Teile der Laufzeitumgebung zu starten und stoppen (Datastore, Blobstore, Memcache usw.), ● Test/Testumgebung muss diese verwenden, ● Nose-Tests: nosegae ! -> nicht lauffähig ● eigenen Testrunner geschrieben, zu unflexibel ● ● schließlich zope.testrunner mit Appengine verheiratet dann plone.testing Test-Layers integriert 32 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 33. Tests in Schichten plone.testing + zope.testrunner ● ● ● ● ● Layers werden für Test Fixtures (Test Ausstattungen) genutzt, die von mehreren TestFällen gemeinsam genutzt werden, vereinfacht/ vereinheitlicht Setup/ Teardown Aufteilung z.B. pure Python Tests, Tests mit Datenbank, Tests gegen Webserver, ..., bzw.: Unit-Test, Functional-Tests und IntegrationTests, bei sehr vielen Tests schnellere Ausführung. 33 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 34. Test-Beispiel 1: mit Datenbank, ohne Webtest creating a first node:: >>> from example_app import models >>> node = models.create_node('test1', ... 'Test One', 'This is a first test.') >>> node TreeModel(key=Key('TreeModel', 'test1'), body=u'This is a first test.', title=u'Test One') trying to create a node that already exists raises ValueError:: >>> node = models.create_node('test1', 'X', 'X') Traceback (most recent call last): ... ValueError: node with name test1 already exists 34 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 35. Test-Beispiel 2: mit Datenbank und Webtest >>> node = models.create_node('test1', 'Test One', ... 'This is a first test.') >>> node TreeModel(key=Key('TreeModel', 'test1'), body=u'This is a first test.', title=u'Test One') >>> response = layer.webtest.get('/test1') >>> 'Test One' in response True >>> 'This is a first test.' in response True >>> response = layer.webtest.get('/nonexistent', ... status='404', expect_errors=True) >>> response.status '404 Not Found' 35 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.
  • 36. 36 von 36 Text: Creative Commons Namensnennung-Keine kommerzielle Nutzung- Keine Bearbeitung 3.0 Österreich Lizenz.

Hinweis der Redaktion

  1. Dank Roland, ich möchte jetzt ein wenig in die Welt der Virtualisierung, der Redundanz und des technischen Webpublishings mit Plone eintauchen. Wenn dies für Sie noch Fremdwörter sind bleiben Sie trotzdem sitzen. Ich versuche behutsam die Begriffe zu erklären.