Pyramid talk, PyVo, 2018 Petr Blahoš

Podobné dokumenty
Microsoft ASP.NET 2.0/3.0 (advanced)

Postup. Úvodem. Hlavní myšlenka frameworku. application. system. assets. uploads

Python profesionálně: dynamické parametry, generátory, lambda funkce... with. Dynamické parametry

Django. Webový framework pro Python Projekt = webová stránka Aplikace = určitá funkcionalita webu

Distribuované systémy a výpočty

Tvorba aplikací v Oracle Application Express

Ovladače pro Windows. Ovladače Windows A4M38KRP. Str. 1

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Proč Angular JS framework?

KIV/PIA 2013 Jan Tichava

Ruby on Rails. Bc. Tomáš Juřík Bc. Bára Huňková

X33EJA Enterprise Java. Petr Šlechta Sun Microsystems

Spojový seznam. Jan Kybic.

Routery Turris a jejich ekosystém I

Objektově orientované programování v jazyce Python

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

Šifrování (2), FTP. Petr Koloros p.koloros [at] sh.cvut.cz.

Virtuální privátní databáze

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Objektově orientované programování v jazyce Python

RMI Remote Method Invocation

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Demilitarizovaná zóna (DMZ)

Zabezpečení proti SQL injection

Statistica Enterprise

Nastavení DCOM. Uživatelský manuál

Tvorba informačních systémů

Ladění ovladačů pomocí virtuálního stroje...2 Úvod...2 Ladění ovladačů pomocí dvou fyzických počítačů...2 Ladění ovladačů pomocí jednoho fyzického

Zabezpečení proti SQL injection

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

Content Security Policy

Vývoj Internetových Aplikací

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Tvorba informačních systémů

Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz

Python XML a Web 1 PGS

WWW dotazovací služby pro prostorová data URM. Jiří Čtyroký Útvar rozvoje hl. m. Prahy

Stručný úvod pro programátory. Michal Kuchta

Mobilní malware na platformě Android Přednáška 2. Ing. Milan Oulehla

Scrapping stránek prakticky: Dívka dne na TN.cz

ios Cvičení RSS čtečka

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Nástroje pro FlowSpec a RTBH. Jiří Vraný, Petr Adamec a Josef Verich CESNET. 30. leden 2019 Praha

Programování v Pythonu

Verzování a publikace dat na webu za pomoci PostgreSQL

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Flask kniha. aneb jak dostat Python na web. Ondrej Sika

Odorik Documentation. Vydání 0.6

Stromy. Jan Kybic.

Django Urls, views, templates

SYSTÉM PRO KONFIGURACI KOMUNIKAČNÍCH TERMINÁLŮ A VIZUALIZACI STAVOVÝCH DAT Z KOLEJOVÝCH VOZIDEL

JSON API pro zjišťování cen MtG karet

Modelování hrozeb. Hana Vystavělová AEC, spol. s r.o.

Nejprve je třeba spustit správce serveru: V něm je třeba vybrat přidání rolí:

Přechod webových aplikací na Python 3 Tomáš Pazderka 6. listopadu 2018

JavaServer Faces Zdeněk Troníček

Vytváření uživatelských datových typů a funkcí v Javě

Komponentově orientované webové frameworky. Jiří Stránský twitter.com/jistr

Testování webových aplikací Seznam.cz

TESTOVÁNÍ PRAKTICKÝCH ZNALOSTÍ STUDENTŮ HISTOLOGIE V PROSTŘEDÍ POČÍTAČOVÉ UČEBNY

Dokumentový sklad. Dokumentový sklad v.1. Dokumentový sklad v.2. Koncepce skladu v.2. Petr Lampa

PRG036 Technologie XML

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Čipové karty Lekařská informatika

DEVFEST ANGULAR 2 WORKSHOP. angular.cz

Testovací metoda. Testovací metoda. public class SimpleTest {

Architektura softwarových systémů

LW051 Sweex Wireless LAN PC Card 54 Mbps. Pokud jakákoliv z výše uvedených položek chybí, obraťte se na prodejnu, ve které jste zařízení zakoupili.

Michal Augustýn Microsoft Most Valuable Professional

ANGULAR 2 WORKSHOP. angular.cz

Jazyk C# - přístup k datům

SHAREPOINT HACKING, ANEB JAK PŘIJÍT K SHAREPOINT DATŮM?

Sémantický web 10 let poté

Virtual Private Database (VPD) Jaroslav Kotrč

KAPITOLA 1 Představení platformy Microsoft SQL Server 2008

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Nasazení Object Relation Mapping nástrojů nad legacy datovým modelem

E-shop k FlexiBee. FlexiBee Developers Day Tomáš Hruška, Arit s.r.o. INFORMAČNÍ TECHNOLOGIE

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

.NET v SQL Serveru. Jan Drozen NDBI039.

Úvod do Entity Frameworku

Chain of responsibility

MySQL sežere vaše data

Rozptylovací tabulky

Monitoring SQL Server, Resource Governor, Tracing SQL Server

Začínáme s vývojem pro Android

API pro volání služby kurzovního lístku KB

Nové geovědní informační služby:

Spring framework 2.0. Roman Pichlík CZJUG

Metody tvorby ontologií a sémantický web. Martin Malčík, Rostislav Miarka

Správa a tisk faktur v LaTeXu

Ukládání a vyhledávání XML dat

Apache Cordova (PhoneGap 3)

WCF. IW5 - Programování v.net a C# WCF

Instalace. Připojení zařízení. Vypněte všechna připojená síťová zařízení, včetně vašeho PC, modemu a routeru.

Šifrování ve Windows. EFS IPSec SSL. - Encrypting File System - Internet Protocol Security - Secure Socket Layer - Private Point to Point Protocol

Transkript:

pyrasample Walkthough jednoduchou aplikací: https://github.com/petrblahos/pyrasample Prohlížení jakékoliv databáze Traversal Mapování kontextu na view Databáze

pyrasample python -m venv PYRASAMPLE cd PYRASAMPLE git clone https://github.com/petrblahos/pyrasample.git. bin/activate cd pyrasample pip install U pip setuptools pip install -e. # Editujte development.ini: sqlalchemy.url pserve reload development.ini

Struktura pyrasample pyrasample/ init.py pyrasample/resources.py pyrasample/views.py pyrasample/templates/layout.mako pyrasample/templates/home.mako pyrasample/templates/... pyrasample/model/ init.py pyrasample/model/meta.py pyrasample/static/... MANIFEST.in setup.py development.ini production.ini

pyrasample/ init.py def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings, root_factory=topcontext) config.add_static_view('static', 'static', cache_max_age=3600) config.include('pyramid_mako') config.include('pyrasample.model') config.scan() return config.make_wsgi_app()

model/ init.py def get_tm_session(session_factory, transaction_manager): dbsession = session_factory() zope.sqlalchemy.register( dbsession, transaction_manager=transaction_manager) return dbsession def includeme(config): settings = config.get_settings() config.include('pyramid_tm') engine = sqlalchemy.engine_from_config( settings, "sqlalchemy.") # [... ] session_factory = get_session_factory(engine) config.registry['dbsession_factory'] = session_factory config.add_request_method( # r.tm is the transaction manager used by pyramid_tm lambda r: get_tm_session(session_factory, r.tm), 'db', reify=true )

model/ init.py def get_tm_session(session_factory, transaction_manager): dbsession = session_factory() zope.sqlalchemy.register( dbsession, transaction_manager=transaction_manager) return dbsession Ve view: def includeme(config): request.registry['dbsession_factory'] settings = config.get_settings() config.include('pyramid_tm') engine = sqlalchemy.engine_from_config( settings, "sqlalchemy.") # [... ] session_factory = get_session_factory(engine) config.registry['dbsession_factory'] = session_factory config.add_request_method( # r.tm is the transaction manager Ve used view: by pyramid_tm lambda r: get_tm_session(session_factory, request.db r.tm), 'db', je db session reify=true )

add_request_method SQLAlchemy session Lokalizace: request.translate request.pluralize request._ Mongo DB connection reified

pyrasample/ init.py def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings, root_factory=topcontext) config.add_static_view('static', 'static', cache_max_age=3600) config.include('pyramid_mako') config.include('pyrasample.model') config.scan() return config.make_wsgi_app()

Traversal Způsob mapování URL na view URL Context Context View (virtuální filesystém)

Traversal URL path: /customers/customerid=6/name Resource Tree Root Context: Znáš kontext customers? Ne: Vyvolá KeyError, vyhledávání končí Ano: Vrátí kontext pro customers Znáš kontext pro CustomerId=6? Ne: Vyvolá KeyError Ano: Vrátí kontext pro CustomerId=6 Znáš kontext pro name?...

Traversal class TopContext(object): name = "" parent = None def init (self, request): self.request = request self.tables = metadata.tables def getitem (self, key): return DBContext(self, key)

Traversal class DBContext(object): def init (self, parent, name): self. parent = parent self. name = self.table_name = name self.request = parent.request self.model = metadata.tables[self.table_name] def getitem (self, name): # Schema: column1=value1&column2=value2 params = parse_qs(name) q = self.request.db.query(self.model) for pk in self.model.primary_key: q = q.filter(pk == params[pk.name][0]) return ItemContext(self, name, q.one()) # FIXME: nevyvolá KeyError - vyjasnit

Máme: request context Na konci traversal něco co se nespotřebovalo: view_name View: @view_config( context="pyrasample.resources.topcontext", renderer="templates/home.mako" ) def home(context, request): # context je typu TopContext # Máme k dispozici: context.tables return {}

Jiné view @view_config( context="pyrasample.resources.dbcontext", renderer="templates/dbtable.mako", ) def dbtable(request): # context je taky v request.context # a je to DBContext # takže máme: request.context.model # request.context.get_query return {}

Další view @view_config( context="pyrasample.resources.itemcontext", renderer="templates/dbitem.mako" ) def dbitem(request): return {}

Predikáty @view_config( context="pyrasample.resources.itemcontext", renderer="templates/dbitem.mako", name="edit", permission="edit", request_method="get", ) def dbitem_edit(context, request): form = context.item.make_form(request) return {"form": form} @view_config( context="pyrasample.resources.itemcontext", renderer="templates/dbitem.mako", name="edit", permission="edit", request_method="post", ) def dbitem_save(context, request): # zpracuj POST return HTTPFound( location=request.resource_url(context))

Nejlepší kousky View handler: má všechna data Co jste neviděli můžeme dělat kontrolu request params mimo View request params jako parametry funkce usnadní testování predikáty vestavěné i uživatelsky definované object level security

pyrasample/ init.py def main(global_config, **settings): """ This function returns a Pyramid WSGI application. """ config = Configurator(settings=settings, root_factory=topcontext) config.add_static_view('static', 'static', cache_max_age=3600) config.include('pyramid_mako') config.include('pyrasample.model') config.scan() direktivy jako @view_config @subscriber return config.make_wsgi_app()

Zdroje https://trypyramid.com/ https://pyramid.readthedocs.org/ https://docs.pylonsproject.org/projects/pyramidcookbook/en/latest/index.html https://github.com/petrblahos/pyrasample