All pastes #216107 Raw Edit

Someone

public text v1 · immutable
#216107 ·published 2006-10-22 23:30 UTC
rendered paste body
def detail(request, file_id):
	file = cache.get('file_%s' % file_id)
	if not file:
		file = get_object_or_404(File, visible=True, pk=file_id)
		cache.set('file_%d' % (file.id), file, 60*600)

	file_data = cache.get('file_data_%s_%s' % (request.LANGUAGE_CODE, file_id))
	if not file_data:
		file_data = Data.objects.get(file=file_id, lang=request.LANGUAGE_CODE)
		cache.set('file_data_%s_%s' % (request.LANGUAGE_CODE, file_id), file_data, 60*600)	

	version_list = cache.get('version_list_%s' % file_id)
	if not version_list:
		version_list = Version.objects.filter(file=file_id).order_by('-post_date')[0:5]
		cache.set('version_list_%s' % file_id, version_list, 60*600)	

	OBJECT = {'app': 'files', 'view': 'file', 'id': file_id}

	extra_context = {'file': file, 'version_list': version_list, 'file_data': file_data, 'OBJECT': OBJECT}
	context = template.RequestContext(request)
	context.update(extra_context)
	return render_to_response('files/detail.html', context_instance=context)

class File(models.Model, ScoreManager, LabelManager, MirrorManager):
	category = models.ForeignKey(Category, related_name="file_category", db_index=True)
	name = models.CharField(maxlength=200, core=True)
	author = models.ForeignKey(User, raw_id_admin=True, db_index=True)
	contributors = models.ManyToManyField(User, related_name="file_contributors", db_index=True, filter_interface=models.HORIZONTAL, blank=True, null=True)
	visible = models.BooleanField(default=True)
	post_date = models.DateTimeField(auto_now_add=True)
	last_post_date = models.DateTimeField(auto_now_add=True)
	parent = models.ForeignKey('self', related_name="file_parent", db_index=True, blank=True, null=True, raw_id_admin=True)
	parent_type = models.ForeignKey(ParentType, db_index=True, blank=True, null=True)
	required_files = models.ManyToManyField('self', related_name="required_files_rel", db_index=True, blank=True, null=True)
	optional_files = models.ManyToManyField('self', related_name="optional_files_rel", db_index=True, blank=True, null=True)
	downloads_total = models.PositiveIntegerField(default=0)
	downloads_today = models.PositiveIntegerField(default=0)
	game = models.ForeignKey(Game, db_index=True)
	ratings_score = models.IntegerField(default=0, editable=False)
	ratings_votes = models.IntegerField(default=0, editable=False)
	labels = models.TextField(null=True, editable=False)
	comments_total = models.PositiveIntegerField(default=0, editable=False)

	def __str__(self):
		return self.name

	def get_absolute_url(self):
		return "/%s/files/details/%d/%s/" % (threadlocals.get_current_lang(), self.id, safe_name(self.name))

	def get_edit_url(self):
		return "/%s/files/edit/%d/" % (threadlocals.get_current_lang(), self.id)

	def save(self, new_data):
		super(self, new_data)
		self.propagate()

	class Admin:
		list_display = ('name', 'post_date', 'author', 'category', 'game',)
		list_filter = ('post_date', 'category',)
		search_fields = ['name', 'game',]
	
	class Meta:
		verbose_name = _('File')
		verbose_name_plural = _('Files')
		ordering = ('-post_date',)
		unique_together = (('name', 'game',),)

	class History:
		pass

class Version(models.Model):
	file = models.ForeignKey(File, db_index=True)
	md5 = models.CharField(null=True, maxlength=32, blank=True)
	name = models.CharField(maxlength=200)
	post_date = models.DateTimeField(auto_now_add=True)
	archive = models.FileField(upload_to='files/')
	game = models.ManyToManyField(Game)
	change_log = models.TextField(blank=True, null=True)
	author = models.ForeignKey(User, raw_id_admin=True, db_index=True)
	downloads = models.PositiveIntegerField()
	type = models.ForeignKey(Type, db_index=True)

	def __str__(self):
		return "%s %s" % (self.file.name, self.name)

	def get_absolute_url(self):
		return self.file.get_absolute_url()

	def get_download_url(self):
		return "/files/downloads/%d/" % self.id

	class Admin:
		list_display = ('file', 'name', 'post_date',)
		list_filter = ('post_date',)
		search_fields = ['file', 'name',]

	class Meta:
		verbose_name = _('File Version')
		verbose_name_plural = _('File Versions')
		ordering = ('-post_date',)
		unique_together = (('name', 'file',),)

	class History:
		pass