@guillotinaweb guillotina.readthedocs.io...

37
guillotina.io guillotina.readthedocs.io @guillotinaweb

Upload: phungtuyen

Post on 28-Oct-2018

227 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

guillotina.ioguillotina.readthedocs.io

@guillotinaweb

Page 2: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

WEB FRAMEWORKS

• Angular/React : Server rendering frameworks are dying

• Most sources of data comes from the web/api

• Lots of experience on storing, distributing, managing resources

Page 3: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

EVOLUTIONThe spirit of great

frameworks live in an AsyncIO context

Page 4: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

INSPIRATIONPlone/Zope’s hierarchical data model

Pyramid’s decorator-based configuration

Django’s global application settings

ZCA pluggability

Plone/Zope’s security model

JSON Schema

Page 5: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

LESSONSTaking lessons learned from

Pyramid, Plone, Django:simplify and apply to an

AsyncIO context

Page 6: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

FEATURES

Page 7: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

TRANSACTIONAll operations are managed

to be durable and confirmed,conflict resolution policies

Page 8: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

CONSCIENTIOUS WRITER

Reduce conflict errors, better performance

Page 9: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

RELATIONAL DATABASES

Use the best database systems available

PostgreSQLCockroachDB

Page 10: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

TREEInformation isorganized in

tree of objects

Page 11: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

RESOURCESObjects are resources with

schema attributes, annotations, OO inheritance and static/dynamic behaviors.

RESOURCE

Page 12: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

JSON SCHEMA/PYTHON

Serialization of python interfaces to JSON Schema

and back again

Page 13: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

SECURITYFull definition of permissions / roles / principals with global

and local inheritance of permissions on the tree.

Allow, Deny, Unset, AllowSingle (no inheritance)

Page 14: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

CRUDDynamic Traversal CRUD HTTP verbs mapping for

each content type

Custom endpoints for specific operations

GET

HEAD

POST

PUTPATCH

Page 15: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

ASYNCIOAll based on asyncio for

network integrations with external indexers, db,

caching, services

Based on aioHTTP

Page 16: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

SIMPLEEasy to install,

Easy to develop

pip install guillotinadocker run guillotina/guillotina

Page 17: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

CORSCors configured globally and

enabled by default

Page 18: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

WEBSOCKETWebsocket connection to apply operations through

frames. Mapping of REST API on a TCP async channel.

Page 19: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

MICRO-SERVICESPerfect for micro-services

Page 20: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

TUSBinary resumable file upload

Page 21: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

APPLICATIONS

Easily extendable with python packages

guillotina_swaggerguillotina_elasticsearchguillotina_rediscacheguillotina_s3storage

guillotina_gcloudstorageguillotina_dbusersguillotina_mailer

guillotina_pgcatalog

Page 22: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

EXTENSIBLEBuilt with adapter and utility

registration and lookup patterns for easy

extensibility.

Page 23: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

COOKIE CUTTER

Cookie cutter templates for configuration and

applications

Page 24: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

ASYNCIO TOOLS: QUEUES & POOLSManaged queues and pool and after response tasks

Page 25: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

EVENTAsync event based system to

trigger operations in code

Async tasks

Page 26: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

REGISTRYConfiguration registry for

each container

Page 27: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

STATIC FILES AND JS APPS

Support for serving JavaScript applications

Page 28: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

MULTI DBMount multiple DBs

Supports:POSTGRESQLCOCKROACH

With dynamic database support

Page 29: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

FILE CLOUDSupport for S3/GCloud

storage.

Database blob storage otherwise

Page 30: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

INDEXElasticSearch indexing

Page 31: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

DIST CACHERedis backend

Page 32: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

SWAGGERAutomatic API

documentation generation

Page 33: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

CONTAINERSDocker / K8s / Nomad out

the box

Page 34: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

EXPLICIT PYAll configuration is defined

on the code using decorators

@configure.service()

Page 35: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

URL Structure

/DB/CONTAINER/OBJ1/OBJ2

Page 36: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

DATA MODEL

Resource & Container

InterfaceSchema fields

Static Behaviors

Dynamic Behaviors

Page 37: @guillotinaweb guillotina.readthedocs.io guillotinapythonbootcamp.net/meetings/meetings/Guillotina-meetup.pdf · guillotina_mailer guillotina_pgcatalog. EXTENSIBLE Built with adapter

Demo