import boto import datetime from bulkperformancerights import config from bulkperformancerights.logic import converter from bulkperformancerights.logic import track from bulkperformancerights.logic import user def tracks_json_to_s3(file_name, user_dict): """Put user's tracks to s3 as line delim json Args: file_name(str): name of file object user(dict): keys are 'type' and 'id' Returns: (int): row count """ s3 = boto.connect_s3() bucket = s3.get_bucket(config.bucket_name) json_key = boto.s3.key.Key(bucket) xlsx_user_s3_path = user.xlsx_to_json_prefix_for_user(user_dict) json_key_name = '{}json/{}{}'.format(config.xlsx_prefix, xlsx_user_s3_path, file_name) json_key.key = json_key_name # Line delimited JSON sent to XLSX for conversion tracks_json, row_count = track.tracks_line_json(user_dict.get('type'), user_dict.get('id')) json_key.set_contents_from_string(tracks_json) return row_count def tracks_json_to_xlsx(file_name, user_dict): """`Export` JSON to XLSX, and storage copies Args: file_name(str): name of file object user(dict): keys are 'type' and 'id' Returns: (Key): result of s3 key copy operation """ s3 = boto.connect_s3() bucket = s3.get_bucket(config.bucket_name) user_s3_path = user.prefix_for_user(user_dict) xlsx_user_s3_path = user.xlsx_to_json_prefix_for_user(user_dict) json_key_name = '{}json/{}{}'.format(config.xlsx_prefix, xlsx_user_s3_path, file_name) json_key = bucket.get_key(json_key_name[1:]) xlsx_key = '{}/{}{}'.format(config.prefix, user_s3_path, file_name) json_key.copy(bucket, xlsx_key) # this file must live in ows-xlsx's s3 prefix template = converter.metadata_template # request JSON converted to XLSX, long poll for completion xlsx_filename = converter.json_to_xlsx( bucket, template, file_name, user_dict.get('type'), user_dict.get('id')) # copy file generated by ows-xlsx to /managerights prefix xlsx_key_name = '{}xlsx/{}{}'.format(config.xlsx_prefix, xlsx_user_s3_path, xlsx_filename) # Add timestamp to downloadable file # and remove old excel files keys = [] # user_s3_path is of format {user_type}/{user_id}/ prefix = '{}{}'.format(config.prefix, user_s3_path).strip('/') extension = '.xlsx' for key in bucket.list(prefix): key_name = key.name if key_name.endswith(extension): keys.append(key_name) if len(keys) > 0: bucket.delete_keys(keys) xlsx_filename = '{}_{}UTC{}'.format( xlsx_filename.rstrip(extension), get_datetime_as_string(), extension ).replace(' ', '_') managerights_key_name = '{}{}{}'.format(config.prefix, user_s3_path, xlsx_filename) xlsx_key = bucket.get_key(xlsx_key_name[1:]) return xlsx_key.copy(bucket, managerights_key_name) def get_datetime_as_string(): date_time = '{:%Y%m%d_%H%M}'.format(datetime.datetime.utcnow()) return date_time