Mercurial > agora
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 |
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 | 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 | 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 | 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 | 32 def __unicode__(self): |
33 return self.name | |
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 | 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 | 53 def __unicode__(self): |
54 return self.name | |
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 ]) |