# -*- coding: utf-8 -*- from django.contrib.contenttypes.models import ContentType from django.conf import settings #models from file.models import FileModel, TmpFile, Photo 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: if item.purpose == 'photo': file_obj = Photo() else: file_obj = FileModel() #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 if item.purpose == 'photo': file_obj.height = item.img_height file_obj.width = item.img_width else: 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() def check_photos(obj, key=None): return from exposition.models import TmpTimeTable, TimeTable from functions.translate import fill_with_signal def check_tmp_timetables(object, key=None): """ object - exposition to which we saved timetable """ if key: temp_objects = TmpTimeTable.objects.filter(key=key) for obj in temp_objects: timetable = TimeTable(begin=obj.begin, end=obj.end, exposition=object, timetable_organiser=obj.timetable_organiser) data = {} for code, name in settings.LANGUAGES: #timetable.translate(code) trans_object = TmpTimeTable._meta.translations_model.objects.get(language_code = code,master__id=getattr(obj,'id')) data['programe_%s'%code] = trans_object.programe data['speaker_%s'%code] = trans_object.speaker fill_with_signal(TimeTable, timetable, data) temp_objects.delete() else: pass