Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-app / pithos / api / dispatch.py @ 0af13d50

History | View | Annotate | Download (2.8 kB)

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