Доброго времени суток.
Подскажите как правильно сделать проверку и подмену файла при загрузке?
Используеться Django 1.10.
В поле filefield загружаеться файл в фомате JSON, который должен содержать массив чисел.
Содержимое файла проверяеться на соответсвие и форматируеться. Как записать уже отформатированные данные в файл вместо старых и сохранить. Либо создать новый файл с отформатированными данными и заменить им полученный из запроса.
def clean_data(self):
import numpy as np
MAX_FILE_SIZE = 200 * 1024 * 1024
file = self.cleaned_data['data']
file_size = file.size
if file_size > MAX_FILE_SIZE:
raise forms.ValidationError("Very large file")
raw_data = file.read().decode('utf-8')
# json_2d_array_of_int32 = np.fromstring(raw_data)
try:
json_data = json.loads(raw_data)
except (TypeError, ValueError):
raise forms.ValidationError("Incorrect JSON format")
else:
json_2d_array_of_int32 = np.array(json_data)
json_data = None
data_dtype = json_2d_array_of_int32.dtype
data_shape = json_2d_array_of_int32.shape
datacorrect = (
(
data_dtype == np.dtype('int32')
or
data_dtype == np.dtype('float64')
)
and
len(data_shape) == 2
)
if not datacorrect:
raise forms.ValidationError("Incorrect data format!"
"Try file with JSON array_of_arrays-like structure")
# Как тут правильно сделать подмену.
# outfile = TemporaryFile()
np.save('temp_json', json_2d_array_of_int32)
# print(type(np.array2string(json_2d_array_of_int32)))
print(np.array_str(json_2d_array_of_int32)[1:-1])
return file
Делаю проверку в методе clean поля.
Рассматриваю даже вариант сохранения в специальном формате numpy.
Спасибо.