Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (1.7 kB)

1
from pithos.api.settings import (BACKEND_DB_MODULE, BACKEND_DB_CONNECTION,
2
                                    BACKEND_BLOCK_MODULE, BACKEND_BLOCK_PATH,
3
                                    BACKEND_QUEUE_MODULE, BACKEND_QUEUE_CONNECTION,
4
                                    BACKEND_QUOTA, BACKEND_VERSIONING)
5
from pithos.backends import connect_backend
6
from pithos.api.util import hashmap_md5
7

    
8
def update_md5(m):
9
    if m['resource'] != 'object' or m['details']['action'] != 'object update':
10
        return
11
    
12
    backend = connect_backend(db_module=BACKEND_DB_MODULE,
13
                              db_connection=BACKEND_DB_CONNECTION,
14
                              block_module=BACKEND_BLOCK_MODULE,
15
                              block_path=BACKEND_BLOCK_PATH,
16
                              queue_module=BACKEND_QUEUE_MODULE,
17
                              queue_connection=BACKEND_QUEUE_CONNECTION)
18
    backend.default_policy['quota'] = BACKEND_QUOTA
19
    backend.default_policy['versioning'] = BACKEND_VERSIONING
20
    
21
    path = m['value']
22
    account, container, name = path.split('/', 2)
23
    version = m['details']['version']
24
    meta = None
25
    try:
26
        meta = backend.get_object_meta(account, account, container, name, 'pithos', version)
27
        if meta['checksum'] == '':
28
            size, hashmap = backend.get_object_hashmap(account, account, container, name, version)
29
            checksum = hashmap_md5(backend, hashmap, size)
30
            backend.update_object_checksum(account, account, container, name, version, checksum)
31
            print 'INFO: Updated checksum for path "%s"' % (path,)
32
    except Exception, e:
33
        print 'WARNING: Can not update checksum for path "%s" (%s)' % (path, e)
34
    
35
    backend.close()