SlideShare a Scribd company logo
DAVVY

DJANGO,WEBDAV E

(PESSIMO) STATO DELL'ARTE
Adriano Di Luzio
Sabato 18 Aprile 2015 - Firenze - PYCONSEI
ABOUT ME
Software Developer - Unbit, Roma
Studente - Informatica Magistrale @ Sapienza
www.github.com/aldur
www.twitter.com/AdrianoDiLuzio
2
DAVVY: IL SOGNO
3
WebDAV
WEBDAV:WHAT?
• Web Distributed Authoring and Versioning [1]
• Estensione di HTTP
• Il web - medium per lettura e scrittura
4
[1] rfc4918
WEBDAV:WHO?
Apple (OS X & iOS clients)
Google (Android Calendars, Contacts)
E molte altre implementazioni.
5
WEBDAV: HOW?
6
HTTP / WebDAV Request
PROPFIND (XML)
HTTP / WebDAV Response
PROPFIND (XML)
HTTP / WebDAV Request
MKCOL
…
HAI DETTO XML?
<D:prop	
  xmlns:D='DAV:'><author	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  xml:lang='en'	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  xmlns:x='http://example.com/ns'	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  xmlns='http://example.com/ns'	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  xmlns:h='http://www.w3.org/1999/xhtml'>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  <x:name>Jane	
  Doe</x:name>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  <x:uri	
  added="2005-­‐11-­‐26"	
  type="email"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  >mailto:jane.doe@example.com</x:uri>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  <x:uri	
  added="2005-­‐11-­‐27"	
  type="web"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  >http://www.example.com</x:uri>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  <x:notes>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Jane	
  has	
  been	
  working	
  way	
  <h:em>too</h:em>	
  long	
  on	
  the	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  long-­‐awaited	
  revision	
  of	
  &lt;RFC2518&gt;.	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  </x:notes>	
  
	
  	
  	
  	
  	
  	
  	
  </author>	
  
	
  	
  	
  	
  	
  </D:prop>
7
XML & HTTP: RICHIESTA
PROPFIND	
  /container/	
  HTTP/1.1	
  
Host:	
  www.example.com	
  
Content-­‐Type:	
  application/xml;	
  charset="utf-­‐8"	
  
Content-­‐Length:	
  xxxx	
  
<?xml	
  version="1.0"	
  encoding="utf-­‐8"	
  ?>	
  
<propfind	
  xmlns="DAV:">	
  
	
  	
  	
  	
  <propname/>	
  
</propfind>
8
XML & HTTP: RISPOSTA
HTTP/1.1	
  207	
  Multi-­‐Status	
  
Content-­‐Type:	
  application/xml;	
  charset="utf-­‐8"	
  
Content-­‐Length:	
  xxxx	
  
<?xml	
  version="1.0"	
  encoding="utf-­‐8"	
  ?>	
  
<multistatus	
  xmlns="DAV:">	
  
	
  	
  <response>	
  
	
  	
  	
  	
  <href>http://www.example.com/container/</href>	
  
	
  	
  	
  	
  <propstat>	
  
	
  	
  	
  	
  	
  	
  <prop	
  xmlns:R="http://ns.example.com/boxschema/">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <R:author/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <creationdate/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <displayname/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <resourcetype/>	
  
	
  	
  	
  	
  	
  	
  </prop>	
  
	
  	
  	
  	
  	
  	
  <status>HTTP/1.1	
  200	
  OK</status>	
  
	
  	
  	
  	
  </propstat>	
  
	
  	
  </response>	
  
<!-­‐-­‐	
  ...	
  -­‐-­‐>	
  	
  
</multistatus>
9
Template
DJANGO & DAVVY
Architettura e paradigmi
10
Model
View
DJANGO & DAVVY
Architettura e paradigmi
10
Model
View
Storage
DJANGO & DAVVY
Architettura e paradigmi
10
Model
View
Storage
DJANGO & DAVVY
Architettura e paradigmi
10
Model
View
Properties
XML → WebDAV
Model → XML
Resources
Collections
DAVVY: DETTAGLI
• Python 2 / Python 3.
• Estendibile a piacimento (Class-View based)
• Condivisione / protezione delle risorse.
11
DAVVY: SET-UP
#	
  settings.py	
  
DAVVY_STORAGE_PATH	
  =	
  '/var/www/davvy'
12
#	
  urls.py	
  
from	
  davvy.base	
  import	
  WebDAV	
  
from	
  davvy.addressbook	
  import	
  CardDAV	
  
from	
  davvy.calendar	
  import	
  CalDAV	
  
urlpatterns	
  =	
  patterns('',	
  
	
  	
  	
  	
  url(r'^principals/(w+)/(.*)',	
  WebDAV.as_view(root='storage')),	
  
	
  	
  	
  	
  url(r'^storage/(w+)/(.*)',	
  WebDAV.as_view(root='storage')),	
  
	
  	
  	
  	
  url(r'^addressbook/(w+)/(.*)',	
  CardDAV.as_view(root='addressbook001')),	
  
	
  	
  	
  	
  url(r'^calendars/(w+)/(.*)',	
  CalDAV.as_view(root='calendars')),	
  
	
  	
  	
  	
  url(r'^admin/',	
  include(admin.site.urls)),	
  
)
DAVVY: CUSTOMDAV
13
class	
  CustomDAV(WebDAV):	
  
	
  	
  	
  def	
  __init__(self,	
  **kwargs):	
  
	
  	
  	
  	
  	
  	
  	
  	
  self.http_method_names	
  =	
  WebDAV.http_method_names	
  +	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ['custom']	
  
	
  	
  	
  	
  	
  	
  	
  	
  super(CalDAV,	
  self).__init__(**kwargs)	
  


	
  	
  	
  def	
  propfind(self,	
  request,	
  user,	
  resource_name):	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  super(CalDAV,	
  self).propfind(	
  
request,	
  user,	
  resource_name,	
  shared=True)	
  
	
  	
  	
  def	
  put(self,	
  request,	
  user,	
  resource_name):	
  
	
  	
  	
  	
  	
  	
  	
  return	
  super(CalDAV,	
  self).put(request,	
  user,	
  resource_name)	
  
	
  	
  	
  #	
  […]	
  
	
  	
  	
  def	
  custom(self,	
  request,	
  user,	
  resource_name):	
  
	
  	
  	
  	
  	
  	
  	
  #	
  A	
  custom	
  HTTP/WebDAV	
  method!	
  
	
  	
  	
  	
  	
  	
  	
  pass	
  
LO STATO DELL’ARTE
L’INCUBO: I CLIENT
14
OS X Calendar MozillaThunderbird
OS X CALENDAR
• Homesets Autodiscovery
• Richieste volanti (PROPFIND /)
• .well-known/{caldav, carddav}
15
MOZILLATHUNDERBIRD
1. Nessun supporto out-of-the-box.
2. Lightning Calendar Extension.
3. Nessun supporto i’ll-build-the-box.
16
I CLIENT: ROUND II
17
OS X Contacts
MozillaThunderbird

+

SOGo
I CLIENT: ROUND III
18
OS X Finder Transmit
SENZA FINE!
19
E NON SIAMO GLI UNICI!
sabre/dav
20
owncloudradicale
milton
L’ALTERNATIVA
https://github.com/unbit/spockfs
21
CONCLUSIONI
• Abbiamo imparato molto…
• …soprattutto a stare lontani da WebDAV!
• Nonostante questo, Davvy funziona!
• Almeno fino al prossimo giro di client.
22
GRAZIE PER L’ATTENZIONE.

DOMANDE?
23
https://github.com/unbit/davvy/
CREDITI RISORSE GRAFICHE
• http://www.kameleon.pics/
• http://icons8.com/
24

More Related Content

What's hot

PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...
webhostingguy
 
Php File Operations
Php File OperationsPhp File Operations
Php File Operations
mussawir20
 
Apache2 BootCamp : Using Apache to Serve Static Content
Apache2 BootCamp : Using Apache to Serve Static ContentApache2 BootCamp : Using Apache to Serve Static Content
Apache2 BootCamp : Using Apache to Serve Static Content
Wildan Maulana
 
いろいろ
いろいろいろいろ
いろいろ
tekezo
 

What's hot (20)

Php basic for vit university
Php basic for vit universityPhp basic for vit university
Php basic for vit university
 
PHP BASIC PRESENTATION
PHP BASIC PRESENTATIONPHP BASIC PRESENTATION
PHP BASIC PRESENTATION
 
PHP file
PHP  filePHP  file
PHP file
 
PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...
 
File Upload
File UploadFile Upload
File Upload
 
Php basics
Php basicsPhp basics
Php basics
 
Uploading a file with php
Uploading a file with phpUploading a file with php
Uploading a file with php
 
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntuMengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
 
Rits Brown Bag - PHP & PHPMyAdmin
Rits Brown Bag - PHP & PHPMyAdminRits Brown Bag - PHP & PHPMyAdmin
Rits Brown Bag - PHP & PHPMyAdmin
 
Php File Operations
Php File OperationsPhp File Operations
Php File Operations
 
REST API Laravel
REST API LaravelREST API Laravel
REST API Laravel
 
Php File Upload
Php File UploadPhp File Upload
Php File Upload
 
The A to Z of developing for the web
The A to Z of developing for the webThe A to Z of developing for the web
The A to Z of developing for the web
 
eZ Publish Cluster Unleashed
eZ Publish Cluster UnleashedeZ Publish Cluster Unleashed
eZ Publish Cluster Unleashed
 
ZH爱丽丝梦游仙境
ZH爱丽丝梦游仙境ZH爱丽丝梦游仙境
ZH爱丽丝梦游仙境
 
JSOP in 60 seconds
JSOP in 60 secondsJSOP in 60 seconds
JSOP in 60 seconds
 
Laporan setting dns
Laporan setting dnsLaporan setting dns
Laporan setting dns
 
Apache2 BootCamp : Using Apache to Serve Static Content
Apache2 BootCamp : Using Apache to Serve Static ContentApache2 BootCamp : Using Apache to Serve Static Content
Apache2 BootCamp : Using Apache to Serve Static Content
 
Reactをproductionに導入して変わったこと
Reactをproductionに導入して変わったことReactをproductionに導入して変わったこと
Reactをproductionに導入して変わったこと
 
いろいろ
いろいろいろいろ
いろいろ
 

Viewers also liked

Bracelets & Bangles by Kunwar Danish (Dan)
Bracelets & Bangles by Kunwar Danish (Dan)Bracelets & Bangles by Kunwar Danish (Dan)
Bracelets & Bangles by Kunwar Danish (Dan)
Kunwar Danish (Dan)
 
Valdez multimedia project_11
Valdez multimedia project_11Valdez multimedia project_11
Valdez multimedia project_11
mellie1218
 
Guillermo_Rodriguez-Portfolio-2015
Guillermo_Rodriguez-Portfolio-2015Guillermo_Rodriguez-Portfolio-2015
Guillermo_Rodriguez-Portfolio-2015
GUILLERMO RODRIGUEZ
 
Immanuel Leduaba cv Latest
Immanuel Leduaba cv LatestImmanuel Leduaba cv Latest
Immanuel Leduaba cv Latest
Immanuel Leduaba
 

Viewers also liked (13)

Bracelets & Bangles by Kunwar Danish (Dan)
Bracelets & Bangles by Kunwar Danish (Dan)Bracelets & Bangles by Kunwar Danish (Dan)
Bracelets & Bangles by Kunwar Danish (Dan)
 
Valdez multimedia project_11
Valdez multimedia project_11Valdez multimedia project_11
Valdez multimedia project_11
 
CMHF powerpoint
CMHF powerpointCMHF powerpoint
CMHF powerpoint
 
Guillermo_Rodriguez-Portfolio-2015
Guillermo_Rodriguez-Portfolio-2015Guillermo_Rodriguez-Portfolio-2015
Guillermo_Rodriguez-Portfolio-2015
 
How Much E-Waste Do We Produce Globally?
How Much E-Waste Do We Produce Globally?How Much E-Waste Do We Produce Globally?
How Much E-Waste Do We Produce Globally?
 
Resume new
Resume newResume new
Resume new
 
Immanuel Leduaba cv Latest
Immanuel Leduaba cv LatestImmanuel Leduaba cv Latest
Immanuel Leduaba cv Latest
 
Oportunidades para el empleo y el emprendimiento verde
Oportunidades para el empleo y el emprendimiento verdeOportunidades para el empleo y el emprendimiento verde
Oportunidades para el empleo y el emprendimiento verde
 
Smart phone based robotic control for surveillance applications
Smart phone based robotic control for surveillance applicationsSmart phone based robotic control for surveillance applications
Smart phone based robotic control for surveillance applications
 
Diadeem roodstaart powerpoint
Diadeem roodstaart powerpointDiadeem roodstaart powerpoint
Diadeem roodstaart powerpoint
 
Catálogo Nectar Sunglasses
Catálogo Nectar SunglassesCatálogo Nectar Sunglasses
Catálogo Nectar Sunglasses
 
นิทรรศการพระสิทธิธาดา
นิทรรศการพระสิทธิธาดา นิทรรศการพระสิทธิธาดา
นิทรรศการพระสิทธิธาดา
 
Dps crime
Dps crimeDps crime
Dps crime
 

Similar to Adriano Di Luzio - Davvy - PyconSEI Talk

03 form-data
03 form-data03 form-data
03 form-data
snopteck
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to Tornado
Gavin Roy
 
atomPub, ruby y la api de 11870
atomPub, ruby y la api de 11870atomPub, ruby y la api de 11870
atomPub, ruby y la api de 11870
David Calavera
 
Rest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.jsRest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.js
Carol McDonald
 
GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009
marpierc
 
nodejs_at_a_glance.ppt
nodejs_at_a_glance.pptnodejs_at_a_glance.ppt
nodejs_at_a_glance.ppt
WalaSidhom1
 
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
King Foo
 

Similar to Adriano Di Luzio - Davvy - PyconSEI Talk (20)

Using and scaling Rack and Rack-based middleware
Using and scaling Rack and Rack-based middlewareUsing and scaling Rack and Rack-based middleware
Using and scaling Rack and Rack-based middleware
 
03 form-data
03 form-data03 form-data
03 form-data
 
Android networking-2
Android networking-2Android networking-2
Android networking-2
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to Tornado
 
atomPub, ruby y la api de 11870
atomPub, ruby y la api de 11870atomPub, ruby y la api de 11870
atomPub, ruby y la api de 11870
 
Using the new WordPress REST API
Using the new WordPress REST APIUsing the new WordPress REST API
Using the new WordPress REST API
 
URL Design
URL DesignURL Design
URL Design
 
Web-Performance
Web-PerformanceWeb-Performance
Web-Performance
 
Rest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.jsRest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.js
 
Rest
RestRest
Rest
 
Rich Portlet Development in uPortal
Rich Portlet Development in uPortalRich Portlet Development in uPortal
Rich Portlet Development in uPortal
 
GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009
 
Web Services
Web ServicesWeb Services
Web Services
 
HTTP2
HTTP2HTTP2
HTTP2
 
nodejs_at_a_glance.ppt
nodejs_at_a_glance.pptnodejs_at_a_glance.ppt
nodejs_at_a_glance.ppt
 
Red5 - PHUG Workshops
Red5 - PHUG WorkshopsRed5 - PHUG Workshops
Red5 - PHUG Workshops
 
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
Building Web Services with Zend Framework (PHP Benelux meeting 20100713 Vliss...
 
SWORD v2 at JISC Depo meeting
SWORD v2 at JISC Depo meetingSWORD v2 at JISC Depo meeting
SWORD v2 at JISC Depo meeting
 
Rapid API development examples for Impress Application Server / Node.js (jsfw...
Rapid API development examples for Impress Application Server / Node.js (jsfw...Rapid API development examples for Impress Application Server / Node.js (jsfw...
Rapid API development examples for Impress Application Server / Node.js (jsfw...
 
Google app engine by example
Google app engine by exampleGoogle app engine by example
Google app engine by example
 

Recently uploaded

Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 

Recently uploaded (20)

Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 

Adriano Di Luzio - Davvy - PyconSEI Talk

  • 1. DAVVY
 DJANGO,WEBDAV E
 (PESSIMO) STATO DELL'ARTE Adriano Di Luzio Sabato 18 Aprile 2015 - Firenze - PYCONSEI
  • 2. ABOUT ME Software Developer - Unbit, Roma Studente - Informatica Magistrale @ Sapienza www.github.com/aldur www.twitter.com/AdrianoDiLuzio 2
  • 4. WEBDAV:WHAT? • Web Distributed Authoring and Versioning [1] • Estensione di HTTP • Il web - medium per lettura e scrittura 4 [1] rfc4918
  • 5. WEBDAV:WHO? Apple (OS X & iOS clients) Google (Android Calendars, Contacts) E molte altre implementazioni. 5
  • 6. WEBDAV: HOW? 6 HTTP / WebDAV Request PROPFIND (XML) HTTP / WebDAV Response PROPFIND (XML) HTTP / WebDAV Request MKCOL …
  • 7. HAI DETTO XML? <D:prop  xmlns:D='DAV:'><author                            xml:lang='en'                            xmlns:x='http://example.com/ns'                            xmlns='http://example.com/ns'                            xmlns:h='http://www.w3.org/1999/xhtml'>                    <x:name>Jane  Doe</x:name>                    <x:uri  added="2005-­‐11-­‐26"  type="email"                        >mailto:jane.doe@example.com</x:uri>                    <x:uri  added="2005-­‐11-­‐27"  type="web"                        >http://www.example.com</x:uri>                    <x:notes>                        Jane  has  been  working  way  <h:em>too</h:em>  long  on  the                        long-­‐awaited  revision  of  &lt;RFC2518&gt;.                    </x:notes>                </author>            </D:prop> 7
  • 8. XML & HTTP: RICHIESTA PROPFIND  /container/  HTTP/1.1   Host:  www.example.com   Content-­‐Type:  application/xml;  charset="utf-­‐8"   Content-­‐Length:  xxxx   <?xml  version="1.0"  encoding="utf-­‐8"  ?>   <propfind  xmlns="DAV:">          <propname/>   </propfind> 8
  • 9. XML & HTTP: RISPOSTA HTTP/1.1  207  Multi-­‐Status   Content-­‐Type:  application/xml;  charset="utf-­‐8"   Content-­‐Length:  xxxx   <?xml  version="1.0"  encoding="utf-­‐8"  ?>   <multistatus  xmlns="DAV:">      <response>          <href>http://www.example.com/container/</href>          <propstat>              <prop  xmlns:R="http://ns.example.com/boxschema/">                  <R:author/>                  <creationdate/>                  <displayname/>                  <resourcetype/>              </prop>              <status>HTTP/1.1  200  OK</status>          </propstat>      </response>   <!-­‐-­‐  ...  -­‐-­‐>     </multistatus> 9
  • 10. Template DJANGO & DAVVY Architettura e paradigmi 10 Model View
  • 11. DJANGO & DAVVY Architettura e paradigmi 10 Model View
  • 12. Storage DJANGO & DAVVY Architettura e paradigmi 10 Model View
  • 13. Storage DJANGO & DAVVY Architettura e paradigmi 10 Model View Properties XML → WebDAV Model → XML Resources Collections
  • 14. DAVVY: DETTAGLI • Python 2 / Python 3. • Estendibile a piacimento (Class-View based) • Condivisione / protezione delle risorse. 11
  • 15. DAVVY: SET-UP #  settings.py   DAVVY_STORAGE_PATH  =  '/var/www/davvy' 12 #  urls.py   from  davvy.base  import  WebDAV   from  davvy.addressbook  import  CardDAV   from  davvy.calendar  import  CalDAV   urlpatterns  =  patterns('',          url(r'^principals/(w+)/(.*)',  WebDAV.as_view(root='storage')),          url(r'^storage/(w+)/(.*)',  WebDAV.as_view(root='storage')),          url(r'^addressbook/(w+)/(.*)',  CardDAV.as_view(root='addressbook001')),          url(r'^calendars/(w+)/(.*)',  CalDAV.as_view(root='calendars')),          url(r'^admin/',  include(admin.site.urls)),   )
  • 16. DAVVY: CUSTOMDAV 13 class  CustomDAV(WebDAV):        def  __init__(self,  **kwargs):                  self.http_method_names  =  WebDAV.http_method_names  +                            ['custom']                  super(CalDAV,  self).__init__(**kwargs)   
      def  propfind(self,  request,  user,  resource_name):                  return  super(CalDAV,  self).propfind(   request,  user,  resource_name,  shared=True)        def  put(self,  request,  user,  resource_name):                return  super(CalDAV,  self).put(request,  user,  resource_name)        #  […]        def  custom(self,  request,  user,  resource_name):                #  A  custom  HTTP/WebDAV  method!                pass  
  • 17. LO STATO DELL’ARTE L’INCUBO: I CLIENT 14 OS X Calendar MozillaThunderbird
  • 18. OS X CALENDAR • Homesets Autodiscovery • Richieste volanti (PROPFIND /) • .well-known/{caldav, carddav} 15
  • 19. MOZILLATHUNDERBIRD 1. Nessun supporto out-of-the-box. 2. Lightning Calendar Extension. 3. Nessun supporto i’ll-build-the-box. 16
  • 20. I CLIENT: ROUND II 17 OS X Contacts MozillaThunderbird
 +
 SOGo
  • 21. I CLIENT: ROUND III 18 OS X Finder Transmit
  • 23. E NON SIAMO GLI UNICI! sabre/dav 20 owncloudradicale milton
  • 25. CONCLUSIONI • Abbiamo imparato molto… • …soprattutto a stare lontani da WebDAV! • Nonostante questo, Davvy funziona! • Almeno fino al prossimo giro di client. 22
  • 27. CREDITI RISORSE GRAFICHE • http://www.kameleon.pics/ • http://icons8.com/ 24