Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-app / pithos / api / dispatch.py @ 75cf66bf

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