You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

136 lines
5.0 KiB

# -*- 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