past3d/pastebin/models.py

60 lines
1.3 KiB
Python

import os.path
import struct
from hashlib import md5
from datetime import datetime
from django.contrib.auth.models import User
from django.db import models
def safe_upload_path(base_dir):
def generate_path(instance, filename):
ext = os.path.splitext(filename)[1]
md5sum = md5()
md5sum.update(instance.name
+ str(datetime.now())
+ filename)
randomname = md5sum.hexdigest()
return os.path.join(base_dir,'%s%s' % (randomname, ext))
return generate_path
class Geometry(models.Model):
name = models.CharField(max_length = 128)
description = models.TextField(blank=True)
user = models.ForeignKey(User, blank=True)
date = models.DateTimeField(auto_now_add=True)
polycount = models.IntegerField(blank=True, default=0)
file = models.FileField(upload_to=safe_upload_path('models'))
sourcefile = models.FileField(upload_to=safe_upload_path('sources'), blank=True)
def get_polycount(self):
if self.polycount == 0:
self.file.open()
self.polycount = 0
if self.file.read(5) != "solid":
self.file.seek(80)
self.polycount = struct.unpack("i",self.file.read(4))[0]
else:
line = self.file.readline()
while line != "":
line = line.strip()
if line.startswith("facet"):
self.polycount += 1
line = self.file.readline()
self.save()
return self.polycount