File: lss3

package info (click to toggle)
python-boto 2.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 3,432 kB
  • sloc: python: 31,330; makefile: 108
file content (77 lines) | stat: -rwxr-xr-x 2,270 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/usr/bin/env python
import boto
from boto.s3.connection import OrdinaryCallingFormat

def sizeof_fmt(num):
    for x in ['b ','KB','MB','GB','TB', 'XB']:
        if num < 1024.0:
            return "%3.1f %s" % (num, x)
        num /= 1024.0
    return "%3.1f %s" % (num, x)

def list_bucket(b, prefix=None):
    """List everything in a bucket"""
    from boto.s3.prefix import Prefix
    from boto.s3.key import Key
    total = 0
    query = b
    if prefix:
        if not prefix.endswith("/"):
            prefix = prefix + "/"
        query = b.list(prefix=prefix, delimiter="/")
        print "%s" % prefix
    num = 0
    for k in query:
        num += 1
        mode = "-rwx---"
        if isinstance(k, Prefix):
            mode = "drwxr--"
            size = 0
        else:
            size = k.size
            for g in k.get_acl().acl.grants:
                if g.id == None:
                    if g.permission == "READ":
                        mode = "-rwxr--"
                    elif g.permission == "FULL_CONTROL":
                        mode = "-rwxrwx"
        if isinstance(k, Key):
           print "%s\t%s\t%010s\t%s" % (mode, k.last_modified,
                 sizeof_fmt(size), k.name)
        else:
           #If it's not a Key object, it doesn't have a last_modified time, so
           #print nothing instead
           print "%s\t%s\t%010s\t%s" % (mode, ' '*24,
              sizeof_fmt(size), k.name)
        total += size
    print "="*80
    print "\t\tTOTAL:  \t%010s \t%i Files" % (sizeof_fmt(total), num)

def list_buckets(s3):
    """List all the buckets"""
    for b in s3.get_all_buckets():
        print b.name

if __name__ == "__main__":
    import sys

    pairs = []
    mixedCase = False
    for name in sys.argv[1:]:
            if "/" in name:
                pairs.append(name.split("/",1))
            else:
                pairs.append([name, None])
            if pairs[-1][0].lower() != pairs[-1][0]:
                mixedCase = True
    
    if mixedCase:
        s3 = boto.connect_s3(calling_format=OrdinaryCallingFormat())
    else:
        s3 = boto.connect_s3()

    if len(sys.argv) < 2:
        list_buckets(s3)
    else:
        for name, prefix in pairs:
            list_bucket(s3.get_bucket(name), prefix)