123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- __author__ = 'niels'
- import sys, re, time, os
- from boto.s3.connection import S3Connection
- from boto.s3.key import Key
- from subprocess import call
- conn = S3Connection(sys.argv[1], sys.argv[2])
- bucket = conn.get_bucket("owncloud-photos")
- content = bucket.list(prefix="Kina/20141117")
- class KeyMeta:
- s3_path = ""
- filename = ""
- filename_tiny = ""
- filename_prev = ""
- filename_full = ""
- def __init__(self, s3_path, filename):
- self.s3_path = s3_path
- self.filename = filename
- def getRawFromS3(key):
- # Get filename from path
- req = re.search('^(.+/)(.+).NEF$', key.name)
- if(req):
- s3_path = req.group(1)
- filename = req.group(2)
- # Copy to file
- fp = open(filename + ".NEF", "w")
- key.get_file(fp)
- return KeyMeta(s3_path, filename)
- else:
- return None
- def produceJPGs(key_meta):
- params_def = ["ufraw-batch", key_meta.filename + ".NEF", "--embedded-image", "--overwrite"]
- # Tiny thumbnail (250px)
- key_meta.filename_tiny = key_meta.filename + "_250.jpg"
- params_tiny = list(params_def)
- params_tiny.extend(["--size=250", "--output=" + key_meta.filename_tiny])
- call(params_tiny)
- # Preview (1600px)
- key_meta.filename_prev = key_meta.filename + "_1600.jpg"
- params_prev = list(params_def)
- params_prev.extend(["--size=1600", "--output=" + key_meta.filename_prev])
- call(params_prev)
- # Full
- key_meta.filename_full = key_meta.filename + ".jpg"
- params_full = list(params_def)
- params_full.extend(["--output=" + key_meta.filename_full])
- call(params_full)
- return key_meta
- def uploadToS3(key_meta):
- # Tiny
- key_tiny = Key(bucket)
- key_tiny.key = key_meta.s3_path + key_meta.filename_tiny
- key_tiny.set_contents_from_filename(key_meta.filename_tiny)
- print ("[%s] uploaded" % key_tiny.key)
- # Preview
- key_prev = Key(bucket)
- key_prev.key = key_meta.s3_path + key_meta.filename_prev
- key_prev.set_contents_from_filename(key_meta.filename_prev)
- print ("[%s] uploaded" % key_prev.key)
- # Full
- key_full = Key(bucket)
- key_full.key = key_meta.s3_path + key_meta.filename_full
- key_full.set_contents_from_filename(key_meta.filename_full)
- print ("[%s] uploaded" % key_full.key)
- def cleanUp(key_meta):
- os.remove(key_meta.filename + ".NEF")
- os.remove(key_meta.filename_tiny)
- os.remove(key_meta.filename_prev)
- os.remove(key_meta.filename_full)
- start = time.time()
- file_count = 0
- for key in content:
- print ("Getting raw from S3")
- key_meta = getRawFromS3(key)
- if(key_meta):
- print ("Raw [%s] retrieved" % key_meta.filename)
- print ("Producing bitmaps")
- produceJPGs(key_meta)
- print ("Bitmaps produced")
- print ("Uploading bitmaps to S3")
- uploadToS3(key_meta)
- print ("All bitmaps uploaded to S3")
- print ("Cleaning up")
- cleanUp(key_meta)
- file_count = file_count + 1
- else:
- print ("Non-RAW found, skipping")
- end = time.time()
- time_delta = end - start
- print ("Completed for [%s] files in [%s] seconds" % (file_count, time_delta))
|