Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-app / pithos / api / dispatch.py @ 133e3fcf

History | View | Annotate | Download (1.9 kB)

1 b1dadd0e Sofia Papagiannaki
#from pithos.backends import connect_backend
2 b1dadd0e Sofia Papagiannaki
from pithos.api.util import hashmap_md5, get_backend
3 b3155065 Antony Chazapis
4 a74ba506 Sofia Papagiannaki
from django.core.mail import send_mail
5 a74ba506 Sofia Papagiannaki
6 18cd931f Sofia Papagiannaki
from django.conf import settings
7 a74ba506 Sofia Papagiannaki
8 75cf66bf Sofia Papagiannaki
import socket
9 75cf66bf Sofia Papagiannaki
from smtplib import SMTPException
10 75cf66bf Sofia Papagiannaki
11 d50ed8d4 Sofia Papagiannaki
12 b3155065 Antony Chazapis
def update_md5(m):
13 b3155065 Antony Chazapis
    if m['resource'] != 'object' or m['details']['action'] != 'object update':
14 b3155065 Antony Chazapis
        return
15 d50ed8d4 Sofia Papagiannaki
16 b1dadd0e Sofia Papagiannaki
    backend = get_backend()
17 d50ed8d4 Sofia Papagiannaki
18 b3155065 Antony Chazapis
    path = m['value']
19 b3155065 Antony Chazapis
    account, container, name = path.split('/', 2)
20 b3155065 Antony Chazapis
    version = m['details']['version']
21 b3155065 Antony Chazapis
    meta = None
22 b3155065 Antony Chazapis
    try:
23 d50ed8d4 Sofia Papagiannaki
        meta = backend.get_object_meta(
24 d50ed8d4 Sofia Papagiannaki
            account, account, container, name, 'pithos', version)
25 b3155065 Antony Chazapis
        if meta['checksum'] == '':
26 d50ed8d4 Sofia Papagiannaki
            size, hashmap = backend.get_object_hashmap(
27 d50ed8d4 Sofia Papagiannaki
                account, account, container, name, version)
28 b3155065 Antony Chazapis
            checksum = hashmap_md5(backend, hashmap, size)
29 d50ed8d4 Sofia Papagiannaki
            backend.update_object_checksum(
30 d50ed8d4 Sofia Papagiannaki
                account, account, container, name, version, checksum)
31 b3155065 Antony Chazapis
            print 'INFO: Updated checksum for path "%s"' % (path,)
32 b3155065 Antony Chazapis
    except Exception, e:
33 b3155065 Antony Chazapis
        print 'WARNING: Can not update checksum for path "%s" (%s)' % (path, e)
34 d50ed8d4 Sofia Papagiannaki
35 b3155065 Antony Chazapis
    backend.close()
36 a74ba506 Sofia Papagiannaki
37 d50ed8d4 Sofia Papagiannaki
38 a74ba506 Sofia Papagiannaki
def send_sharing_notification(m):
39 a74ba506 Sofia Papagiannaki
    if m['resource'] != 'sharing':
40 a74ba506 Sofia Papagiannaki
        return
41 d50ed8d4 Sofia Papagiannaki
42 a74ba506 Sofia Papagiannaki
    members = m['details']['members']
43 a74ba506 Sofia Papagiannaki
    user = m['details']['user']
44 a74ba506 Sofia Papagiannaki
    path = m['value']
45 a74ba506 Sofia Papagiannaki
    account, container, name = path.split('/', 2)
46 d50ed8d4 Sofia Papagiannaki
47 a74ba506 Sofia Papagiannaki
    subject = 'Invitation to a Pithos+ shared object'
48 18cd931f Sofia Papagiannaki
    from_email = settings.SERVER_EMAIL
49 a74ba506 Sofia Papagiannaki
    recipient_list = members
50 18cd931f Sofia Papagiannaki
    message = ("User %s has invited you to a Pithos+ shared object."
51 18cd931f Sofia Papagiannaki
               "You can view it under \"Shared to me\" at \"%s\".")
52 18cd931f Sofia Papagiannaki
    message = message % (user, path)
53 a74ba506 Sofia Papagiannaki
    try:
54 a74ba506 Sofia Papagiannaki
        send_mail(subject, message, from_email, recipient_list)
55 d50ed8d4 Sofia Papagiannaki
        print 'INFO: Sharing notification sent for path "%s" to %s' % (
56 d50ed8d4 Sofia Papagiannaki
            path, ','.join(recipient_list))
57 a74ba506 Sofia Papagiannaki
    except (SMTPException, socket.error) as e:
58 d50ed8d4 Sofia Papagiannaki
        print 'WARNING: Can not update send email for sharing "%s" (%s)' % (
59 d50ed8d4 Sofia Papagiannaki
            path, e)