Mercurial > agora
annotate apps/bundle/models.py @ 187:4752861906b3
Added help_text to bundle description field
Explains that a DESCRIPTION file can be used instead (if it exists)
author | dellsystem <ilostwaldo@gmail.com> |
---|---|
date | Sat, 27 Oct 2012 16:26:11 -0400 |
parents | b711f0087709 |
children | 1eb652aa501a |
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) |
187
4752861906b3
Added help_text to bundle description field
dellsystem <ilostwaldo@gmail.com>
parents:
184
diff
changeset
|
25 description = models.TextField(blank=True, null=True, help_text=_( |
4752861906b3
Added help_text to bundle description field
dellsystem <ilostwaldo@gmail.com>
parents:
184
diff
changeset
|
26 "Optional. If this field is left empty and the checkbox below " |
4752861906b3
Added help_text to bundle description field
dellsystem <ilostwaldo@gmail.com>
parents:
184
diff
changeset
|
27 "is ticked, then the DESCRIPTION file (if it exists) will be " |
4752861906b3
Added help_text to bundle description field
dellsystem <ilostwaldo@gmail.com>
parents:
184
diff
changeset
|
28 "used as the bundle description instead.")) |
184
b711f0087709
Use DESCRIPTION file for bundles (SCHEMA CHANGE)
dellsystem <ilostwaldo@gmail.com>
parents:
177
diff
changeset
|
29 octave_format = models.BooleanField('Is the bundle formatted according' |
b711f0087709
Use DESCRIPTION file for bundles (SCHEMA CHANGE)
dellsystem <ilostwaldo@gmail.com>
parents:
177
diff
changeset
|
30 ' to Octave package manager standards?', default=False) |
b711f0087709
Use DESCRIPTION file for bundles (SCHEMA CHANGE)
dellsystem <ilostwaldo@gmail.com>
parents:
177
diff
changeset
|
31 # If octave_format is true and there is a DESCRIPTION file in the root |
b711f0087709
Use DESCRIPTION file for bundles (SCHEMA CHANGE)
dellsystem <ilostwaldo@gmail.com>
parents:
177
diff
changeset
|
32 description_file = models.ForeignKey('BundleFile', blank=True, null=True, |
b711f0087709
Use DESCRIPTION file for bundles (SCHEMA CHANGE)
dellsystem <ilostwaldo@gmail.com>
parents:
177
diff
changeset
|
33 related_name="described") |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
34 free_license = models.ForeignKey(FreeLicense, default=1) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
35 pub_date = models.DateTimeField('date uploaded', auto_now_add=True) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
36 mod_date = models.DateTimeField('date last modified', auto_now=True) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
37 done_uploading = models.BooleanField(default=False) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
38 file_name = models.CharField(max_length=256) # the uploaded file |
177
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
176
diff
changeset
|
39 latest_version = models.IntegerField(default=1) |
6
c83460992637
Elaborate on stub bundle template
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
4
diff
changeset
|
40 |
3 | 41 def __unicode__(self): |
42 return self.name | |
43 | |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
44 @models.permalink |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
45 def get_absolute_url(self): |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
46 return ('bundle_details', [self.uploader.username, self.name]) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
47 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
48 def get_temp_path(self): |
177
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
176
diff
changeset
|
49 """ |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
176
diff
changeset
|
50 Returns the path to where the file is initially uploaded |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
176
diff
changeset
|
51 """ |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
176
diff
changeset
|
52 return os.path.join('tmp', 'bundles', |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
176
diff
changeset
|
53 "%d_%d" % (self.id, self.latest_version)) |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
54 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
55 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
56 class BundleFile(MPTTModel): |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
57 bundle = models.ForeignKey(Bundle) |
177
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
176
diff
changeset
|
58 version = models.IntegerField() |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
59 parent = TreeForeignKey('self', null=True, blank=True, |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
60 related_name='children') |
3 | 61 name = models.CharField(max_length=256) |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
62 is_dir = models.BooleanField() |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
63 code = models.TextField(null=True, blank=True) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
64 full_path = models.CharField(max_length=256) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
65 file_size = FileSizeField(default=0) # for directories |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
66 |
3 | 67 def __unicode__(self): |
68 return self.name | |
69 | |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
70 def get_path(self): |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
71 if self.parent: |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
72 return os.path.join(self.parent.get_path(), self.name) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
73 else: |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
74 return self.name |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
75 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
76 def get_lines(self): |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
77 return self.code.splitlines() |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
78 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
79 def save_file_contents(self, file, original_filename=None): |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
80 code = file.read() |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
81 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
82 if original_filename is not None: |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
83 filename = original_filename |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
84 else: |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
85 filename = file.name |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
86 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
87 try: |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
88 lexer = lexers.get_lexer_for_filename(filename) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
89 print "lexer is:" |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
90 print lexer |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
91 except util.ClassNotFound: |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
92 print "can't guess the lexer" |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
93 lexer = lexers.TextLexer() |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
94 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
95 self.code = highlight(code, lexer, NakedHtmlFormatter()) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
96 self.save() |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
97 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
98 @models.permalink |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
99 def get_absolute_url(self): |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
100 return ('bundlefile_details', [ |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
101 self.bundle.uploader.username, |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
102 self.bundle.name, |
177
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
176
diff
changeset
|
103 self.version, |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
104 self.get_path() |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
29
diff
changeset
|
105 ]) |