# -*- coding: utf-8 -*- from django.contrib.contenttypes.models import ContentType from django.conf import settings #models from file.models import FileModel, TmpFile from custom_fields import IMG_TYPES import shutil, os def get_alternative_filename(directory, filename): """Function have two incoming arguments: - directory ( like u'/tmp' or u'/tmp/' does not a meter ) - filename Return alternative free file name without directory name """ # Adding last slash if not directory.endswith(r'/'): directory += r'/' # If this name is free skip code execution end return it if not os.path.exists(directory + filename): return filename # split filename by dots fnamearr = filename.split(r'.') # Loop next code until find a free file name while os.path.exists(directory + '.'.join(fnamearr)): # name is to short. add iterator to the end if len(fnamearr) == 1: fnamearr.append(u'1') # its iterable short name elif len(fnamearr) == 2 and fnamearr[-1].isdigit(): fnamearr[-1] = unicode( int(fnamearr[-1]) + 1 ) # name is long and have iterator. increase it elif len(fnamearr) > 1 and fnamearr[-2].isdigit(): fnamearr[-2] = unicode( int(fnamearr[-2]) + 1 ) # name is long and have not an iterator. add it elif len(fnamearr) > 1: fnamearr.insert(-1, u'1') return '.'.join(fnamearr) def check_tmp_files(object, key=None): """ compare key in TmpFile with hidden key in form (form with new object has key, form with object which exist doesnt have key) if key is equal copy TmpFile object to FileModel table like FileModel object with content_type and obj_id than delete TmpFile object """ if key == None: pass else: list = TmpFile.objects.filter(key=key) for item in list: file_obj = FileModel() #ContentType information file_obj.content_type = ContentType.objects.get_for_model(object) file_obj.object_id = getattr(object, 'id') file_name = str(item.file_path).split('/')[-1] #check file type and move it in 'media/imgs/' if type is in IMG_TYPES #else move it in 'media/files/' if str(item.file_type).upper() in IMG_TYPES: alt_name = get_alternative_filename(settings.MEDIA_ROOT+'imgs/',file_name) os.rename(settings.MEDIA_ROOT+'tmp_files/%s'%file_name, settings.MEDIA_ROOT+'tmp_files/%s'%alt_name) shutil.move(settings.MEDIA_ROOT +'tmp_files/%s'%alt_name, settings.MEDIA_ROOT+'imgs/') file_obj.file_path = 'imgs/'+alt_name #move file to '/imgs/' else: alt_name = get_alternative_filename(settings.MEDIA_ROOT+'files/',file_name) os.rename(settings.MEDIA_ROOT+'tmp_files/%s'%file_name, settings.MEDIA_ROOT+'tmp_files/%s'%alt_name) shutil.move(settings.MEDIA_ROOT +'tmp_files/%s'%alt_name, settings.MEDIA_ROOT+'files/') file_obj.file_path = 'files/'+alt_name #another data file_obj.file_type = item.file_type file_obj.img_height = item.img_height file_obj.img_width = item.img_width file_obj.purpose = item.purpose file_obj.save() #translated fields for code, name in settings.LANGUAGES: file_obj.translate(code) trans_object = TmpFile._meta.translations_model.objects.get(language_code = code,master__id=getattr(item,'id')) file_obj.file_name = trans_object.file_name file_obj.description = trans_object.description file_obj.save() list.delete()