Adriano Di Luzio - Davvy - PyconSEI Talk

27
DAVVY DJANGO, WEBDAV E (PESSIMO) STATO DELL'ARTE Adriano Di Luzio Sabato 18 Aprile 2015 - Firenze - PYCONSEI

Transcript of Adriano Di Luzio - Davvy - PyconSEI Talk

Page 1: Adriano Di Luzio - Davvy - PyconSEI Talk

DAVVY DJANGO, WEBDAV E

(PESSIMO) STATO DELL'ARTEAdriano Di Luzio

Sabato 18 Aprile 2015 - Firenze - PYCONSEI

Page 2: Adriano Di Luzio - Davvy - PyconSEI Talk

ABOUT ME

Software Developer - Unbit, Roma

Studente - Informatica Magistrale @ Sapienza

www.github.com/aldur

www.twitter.com/AdrianoDiLuzio

2

Page 3: Adriano Di Luzio - Davvy - PyconSEI Talk

DAVVY: IL SOGNO

3

WebDAV

Page 4: Adriano Di Luzio - Davvy - PyconSEI Talk

WEBDAV: WHAT?

• Web Distributed Authoring and Versioning [1]

• Estensione di HTTP

• Il web - medium per lettura e scrittura

4

[1] rfc4918

Page 5: Adriano Di Luzio - Davvy - PyconSEI Talk

WEBDAV: WHO?

Apple (OS X & iOS clients)

Google (Android Calendars, Contacts)

E molte altre implementazioni.

5

Page 6: Adriano Di Luzio - Davvy - PyconSEI Talk

WEBDAV: HOW?

6

HTTP / WebDAV Request

PROPFIND (XML)

HTTP / WebDAV Response

PROPFIND (XML)

HTTP / WebDAV Request

MKCOL

Page 7: Adriano Di Luzio - Davvy - PyconSEI Talk

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:[email protected]</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

Page 8: Adriano Di Luzio - Davvy - PyconSEI Talk

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

Page 9: Adriano Di Luzio - Davvy - PyconSEI Talk

XML & HTTP: RISPOSTAHTTP/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

Page 10: Adriano Di Luzio - Davvy - PyconSEI Talk

Template

DJANGO & DAVVYArchitettura e paradigmi

10

Model

View

Page 11: Adriano Di Luzio - Davvy - PyconSEI Talk

DJANGO & DAVVYArchitettura e paradigmi

10

Model

View

Page 12: Adriano Di Luzio - Davvy - PyconSEI Talk

Storage

DJANGO & DAVVYArchitettura e paradigmi

10

Model

View

Page 13: Adriano Di Luzio - Davvy - PyconSEI Talk

Storage

DJANGO & DAVVYArchitettura e paradigmi

10

Model

View

Properties

XML → WebDAVModel → XML

ResourcesCollections

Page 14: Adriano Di Luzio - Davvy - PyconSEI Talk

DAVVY: DETTAGLI

• Python 2 / Python 3.

• Estendibile a piacimento (Class-View based)

• Condivisione / protezione delle risorse.

11

Page 15: Adriano Di Luzio - Davvy - PyconSEI Talk

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)),  )

Page 16: Adriano Di Luzio - Davvy - PyconSEI Talk

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  

Page 17: Adriano Di Luzio - Davvy - PyconSEI Talk

LO STATO DELL’ARTEL’INCUBO: I CLIENT

14

OS X Calendar Mozilla Thunderbird

Page 18: Adriano Di Luzio - Davvy - PyconSEI Talk

OS X CALENDAR

• Homesets Autodiscovery

• Richieste volanti (PROPFIND /)

• .well-known/{caldav, carddav}

15

Page 19: Adriano Di Luzio - Davvy - PyconSEI Talk

MOZILLA THUNDERBIRD

1. Nessun supporto out-of-the-box.

2. Lightning Calendar Extension.

3. Nessun supporto i’ll-build-the-box.

16

Page 20: Adriano Di Luzio - Davvy - PyconSEI Talk

I CLIENT: ROUND II

17

OS X ContactsMozilla Thunderbird

+ SOGo

Page 21: Adriano Di Luzio - Davvy - PyconSEI Talk

I CLIENT: ROUND III

18

OS X Finder Transmit

Page 22: Adriano Di Luzio - Davvy - PyconSEI Talk

SENZA FINE!19

Page 23: Adriano Di Luzio - Davvy - PyconSEI Talk

E NON SIAMO GLI UNICI!

sabre/dav

20

owncloudradicale

milton

Page 24: Adriano Di Luzio - Davvy - PyconSEI Talk

L’ALTERNATIVAhttps://github.com/unbit/spockfs

21

Page 25: Adriano Di Luzio - Davvy - PyconSEI Talk

CONCLUSIONI

• Abbiamo imparato molto…

• …soprattutto a stare lontani da WebDAV!

• Nonostante questo, Davvy funziona!

• Almeno fino al prossimo giro di client.

22

Page 26: Adriano Di Luzio - Davvy - PyconSEI Talk

GRAZIE PER L’ATTENZIONE. DOMANDE?

23

https://github.com/unbit/davvy/

Page 27: Adriano Di Luzio - Davvy - PyconSEI Talk

CREDITI RISORSE GRAFICHE

• http://www.kameleon.pics/

• http://icons8.com/

24