annotate apps/bundle/models.py @ 171:a57d15b044a7

Add help_text to name field for bundles Explains that the name field is meant to hold a slug, etc.
author dellsystem <ilostwaldo@gmail.com>
date Sat, 20 Oct 2012 00:29:49 -0400
parents c7be7def8b57
children c042d26e6936
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
151
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
1 import os
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
2
2
3cef0d445036 Start actual app structure
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
diff changeset
3 from django.db import models
3
9a4429652662 Define models
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 2
diff changeset
4 from django.contrib.auth.models import User
171
a57d15b044a7 Add help_text to name field for bundles
dellsystem <ilostwaldo@gmail.com>
parents: 151
diff changeset
5 from django.utils.translation import ugettext_lazy as _
151
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
6 from pygments import lexers, highlight, formatters, util
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
7 from mptt.models import MPTTModel, TreeForeignKey
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
8 from sizefield.models import FileSizeField
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
9
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
10 from apps.free_license.models import FreeLicense
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
11 from apps.snippet.highlight import NakedHtmlFormatter
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
12
2
3cef0d445036 Start actual app structure
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
diff changeset
13
3
9a4429652662 Define models
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 2
diff changeset
14 class Bundle(models.Model):
151
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
15 class Meta:
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
16 # Every user must pick unique names for their bundles
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
17 unique_together = ('uploader','name')
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
18 ordering = ['-pub_date']
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
19
171
a57d15b044a7 Add help_text to name field for bundles
dellsystem <ilostwaldo@gmail.com>
parents: 151
diff changeset
20 name = models.SlugField(help_text=_("Your bundle will be accessible " +
a57d15b044a7 Add help_text to name field for bundles
dellsystem <ilostwaldo@gmail.com>
parents: 151
diff changeset
21 "from a URL that uses the name you enter here, so choose wisely. " +
a57d15b044a7 Add help_text to name field for bundles
dellsystem <ilostwaldo@gmail.com>
parents: 151
diff changeset
22 "Acceptable characters: alphanumeric characters, hyphens, and " +
a57d15b044a7 Add help_text to name field for bundles
dellsystem <ilostwaldo@gmail.com>
parents: 151
diff changeset
23 "underscores."))
3
9a4429652662 Define models
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 2
diff changeset
24 uploader = models.ForeignKey(User)
29
6ba969517b9c Implement initial profiles, cleanup models, change Free_license to FreeLicense
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 6
diff changeset
25 description = models.TextField(max_length=32728)
151
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
26 free_license = models.ForeignKey(FreeLicense, default=1)
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
27 pub_date = models.DateTimeField('date uploaded', auto_now_add=True)
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
28 mod_date = models.DateTimeField('date last modified', auto_now=True)
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
29 done_uploading = models.BooleanField(default=False)
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
30 file_name = models.CharField(max_length=256) # the uploaded file
6
c83460992637 Elaborate on stub bundle template
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 4
diff changeset
31
3
9a4429652662 Define models
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 2
diff changeset
32 def __unicode__(self):
9a4429652662 Define models
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 2
diff changeset
33 return self.name
9a4429652662 Define models
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 2
diff changeset
34
151
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
35 @models.permalink
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
36 def get_absolute_url(self):
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
37 return ('bundle_details', [self.uploader.username, self.name])
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
38
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
39 def get_temp_path(self):
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
40 return os.path.join('tmp', 'bundles', '%s' % self.id)
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
41
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
42
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
43 class BundleFile(MPTTModel):
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
44 bundle = models.ForeignKey(Bundle)
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
45 parent = TreeForeignKey('self', null=True, blank=True,
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
46 related_name='children')
3
9a4429652662 Define models
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 2
diff changeset
47 name = models.CharField(max_length=256)
151
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
48 is_dir = models.BooleanField()
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
49 code = models.TextField(null=True, blank=True)
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
50 full_path = models.CharField(max_length=256)
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
51 file_size = FileSizeField(default=0) # for directories
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
52
3
9a4429652662 Define models
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 2
diff changeset
53 def __unicode__(self):
9a4429652662 Define models
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 2
diff changeset
54 return self.name
9a4429652662 Define models
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 2
diff changeset
55
151
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
56 def get_path(self):
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
57 if self.parent:
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
58 return os.path.join(self.parent.get_path(), self.name)
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
59 else:
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
60 return self.name
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
61
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
62 def get_lines(self):
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
63 return self.code.splitlines()
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
64
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
65 def save_file_contents(self, file, original_filename=None):
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
66 code = file.read()
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
67
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
68 if original_filename is not None:
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
69 filename = original_filename
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
70 else:
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
71 filename = file.name
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
72
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
73 try:
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
74 lexer = lexers.get_lexer_for_filename(filename)
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
75 print "lexer is:"
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
76 print lexer
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
77 except util.ClassNotFound:
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
78 print "can't guess the lexer"
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
79 lexer = lexers.TextLexer()
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
80
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
81 self.code = highlight(code, lexer, NakedHtmlFormatter())
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
82 self.save()
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
83
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
84 @models.permalink
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
85 def get_absolute_url(self):
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
86 return ('bundlefile_details', [
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
87 self.bundle.uploader.username,
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
88 self.bundle.name,
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
89 self.get_path()
c7be7def8b57 Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents: 29
diff changeset
90 ])