def process_task(obj): from atracker.util import create_event process = Process() dbox = None # dbox = Synchronizer(obj.user) log = logging.getLogger('exporter.models.process_task') archive_dir = create_archive_dir(obj) archive_cache_dir = os.path.join(archive_dir, 'cache/') archive_path = os.path.join(archive_dir, 'archive') # .zip appended by 'make_archive' # clean cache and recreate shutil.rmtree(archive_cache_dir, True) os.makedirs(archive_cache_dir) log.debug('archive_dir: %s' % (archive_dir)) log.debug('archive_cache_dir: %s' % (archive_cache_dir)) log.debug('archive_path: %s' % (archive_path)) """ first collect respective items and store everything in a temporary directory (the archive_cache_dir) """ try: for item in obj.export_items.all(): log.debug('export ctype: %s | id: %s' % (item.content_type, item.object_id)) # switching processing for different types """ Releases """ if item.content_type.name.lower() == 'release': t_item = item.content_object """ create item specific path < Artist Name >/< Release Name >/... """ # relative path, for any target item_rel_dir = os.path.join(safe_name(t_item.get_artist_display()), safe_name(t_item.name)) item_cache_dir = os.path.join(archive_cache_dir, item_rel_dir) os.makedirs(item_cache_dir) # holder for playlist entries playlist_items = [] # string format for filename filename_format = '%s - %s - %s.%s' for media in t_item.media_release.all(): log.debug('export item: %s | id: %s' % ( media.name, media.pk)) if obj.fileformat == 'mp3': filename = filename_format % (media.tracknumber, media.name, media.artist.name, 'mp3') filename = safe_name(filename) #filepath = os.path.join(archive_cache_dir, filename) filepath = os.path.join(item_cache_dir, filename) shutil.copyfile(media.get_cache_file('mp3', 'base'), filepath) try: process.inject_metadata(filepath, media) except Exception, e: pass # just dummy - not possible... if obj.fileformat == 'flac': filename = filename_format % (media.tracknumber, media.name, media.artist.name, 'mp3') filename = safe_name(filename) filepath = os.path.join(item_cache_dir, filename) shutil.copyfile(media.get_cache_file('mp3', 'base'), filepath) try: process.inject_metadata(filepath, media) except Exception, e: pass playlist_items.append({'filename': filename, 'item': media}) if dbox: dbox.upload(filepath, os.path.join('Releases', item_rel_dir, filename)) create_event(obj.user, media, None, 'download') if t_item.main_image: try: shutil.copyfile(t_item.main_image.path, os.path.join(item_cache_dir, 'cover.jpg')) except Exception, e: print e pass #archive_file.write(t_item.main_image.path, 'cover.jpg') """ Add additional assets REATME.TXT LICENSE.TXT etc """ with open(os.path.join(item_cache_dir, 'README.TXT'), "w") as txt: str = render_to_string('exporter/txt/README.TXT', {'object': t_item}) txt.write(str) """