Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-app / pithos / api / dispatch.py @ f4fbb0fa

History | View | Annotate | Download (2.9 kB)

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