1import logging
2
3from swiftclient.service import SwiftService, SwiftError
4from sys import argv
5
6logging.basicConfig(level=logging.ERROR)
7logging.getLogger("requests").setLevel(logging.CRITICAL)
8logging.getLogger("swiftclient").setLevel(logging.CRITICAL)
9logger = logging.getLogger(__name__)
10
11def is_png(obj):
12    return (
13        obj["name"].lower().endswith('.png') or
14        obj["content_type"] == 'image/png'
15    )
16
17container = argv[1]
18with SwiftService() as swift:
19    try:
20        list_options = {"prefix": "archive_2016-01-01/"}
21        list_parts_gen = swift.list(container=container)
22        for page in list_parts_gen:
23            if page["success"]:
24                objects = [
25                    obj["name"] for obj in page["listing"] if is_png(obj)
26                ]
27                for down_res in swift.download(
28                        container=container,
29                        objects=objects):
30                    if down_res['success']:
31                        print("'%s' downloaded" % down_res['object'])
32                    else:
33                        print("'%s' download failed" % down_res['object'])
34            else:
35                raise page["error"]
36    except SwiftError as e:
37        logger.error(e.value)
38