Mercurial > agora
annotate apps/snippet/models.py @ 139:b8e0bdc37e32
Hide snippets created by anonymous users
Created a custom manager for Snippet, with a public() method for easily
retrieving all the snippets that were created by registered users.
This change makes the code a bit neater, as it's no longer to necessary
to have to do the {% if snippet.author %} check every time.
author | dellsystem <ilostwaldo@gmail.com> |
---|---|
date | Sat, 29 Sep 2012 21:31:17 -0400 |
parents | 180404efc8cf |
children | c7be7def8b57 |
rev | line source |
---|---|
42
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
1 import datetime |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
2 import difflib |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
3 import random |
101
a8da60d611f7
Reorder imports in some python files
dellsystem <ilostwaldo@gmail.com>
parents:
100
diff
changeset
|
4 |
2
3cef0d445036
Start actual app structure
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
diff
changeset
|
5 from django.db import models |
42
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
6 from django.utils.translation import ugettext_lazy as _ |
54
898881bbfdea
Tie snippets to their authors, enable a couple more lexer languages
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
46
diff
changeset
|
7 from django.contrib.auth.models import User |
42
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
8 |
101
a8da60d611f7
Reorder imports in some python files
dellsystem <ilostwaldo@gmail.com>
parents:
100
diff
changeset
|
9 from agora.apps.snippet.highlight import LEXER_DEFAULT, LEXER_LIST, pygmentize |
a8da60d611f7
Reorder imports in some python files
dellsystem <ilostwaldo@gmail.com>
parents:
100
diff
changeset
|
10 import agora.apps.mptt as mptt |
a8da60d611f7
Reorder imports in some python files
dellsystem <ilostwaldo@gmail.com>
parents:
100
diff
changeset
|
11 |
91
8ef0a2a03034
Add some blank lines where relevant
dellsystem <ilostwaldo@gmail.com>
parents:
54
diff
changeset
|
12 |
42
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
13 t = 'abcdefghijkmnopqrstuvwwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ1234567890' |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
14 def generate_secret_id(length=4): |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
15 return ''.join([random.choice(t) for i in range(length)]) |
2
3cef0d445036
Start actual app structure
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
diff
changeset
|
16 |
139
b8e0bdc37e32
Hide snippets created by anonymous users
dellsystem <ilostwaldo@gmail.com>
parents:
108
diff
changeset
|
17 class SnippetManager(models.Manager): |
b8e0bdc37e32
Hide snippets created by anonymous users
dellsystem <ilostwaldo@gmail.com>
parents:
108
diff
changeset
|
18 def public(self): |
b8e0bdc37e32
Hide snippets created by anonymous users
dellsystem <ilostwaldo@gmail.com>
parents:
108
diff
changeset
|
19 """ |
b8e0bdc37e32
Hide snippets created by anonymous users
dellsystem <ilostwaldo@gmail.com>
parents:
108
diff
changeset
|
20 Returns all the snippets that were created by registered users |
b8e0bdc37e32
Hide snippets created by anonymous users
dellsystem <ilostwaldo@gmail.com>
parents:
108
diff
changeset
|
21 and thus can be publicly listed. |
b8e0bdc37e32
Hide snippets created by anonymous users
dellsystem <ilostwaldo@gmail.com>
parents:
108
diff
changeset
|
22 """ |
b8e0bdc37e32
Hide snippets created by anonymous users
dellsystem <ilostwaldo@gmail.com>
parents:
108
diff
changeset
|
23 return self.filter(author__isnull=False) |
b8e0bdc37e32
Hide snippets created by anonymous users
dellsystem <ilostwaldo@gmail.com>
parents:
108
diff
changeset
|
24 |
b8e0bdc37e32
Hide snippets created by anonymous users
dellsystem <ilostwaldo@gmail.com>
parents:
108
diff
changeset
|
25 |
3 | 26 class Snippet(models.Model): |
139
b8e0bdc37e32
Hide snippets created by anonymous users
dellsystem <ilostwaldo@gmail.com>
parents:
108
diff
changeset
|
27 objects = SnippetManager() |
42
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
28 secret_id = models.CharField(_(u'Secret ID'), max_length=4, blank=True) |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
29 title = models.CharField(_(u'Title'), max_length=120, blank=True) |
54
898881bbfdea
Tie snippets to their authors, enable a couple more lexer languages
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
46
diff
changeset
|
30 author = models.ForeignKey(User, max_length=30, blank=True, null=True) |
42
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
31 content = models.TextField(_(u'Content'), ) |
46
b7c1c22fdfe8
Format code for 80 columns, add some js to static/ dir
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
42
diff
changeset
|
32 content_highlighted = models.TextField(_(u'Highlighted Content'), |
b7c1c22fdfe8
Format code for 80 columns, add some js to static/ dir
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
42
diff
changeset
|
33 blank=True) |
99
d858aae811d0
Move choices for lexer field from SnippetForm to Snippet
dellsystem <ilostwaldo@gmail.com>
parents:
91
diff
changeset
|
34 lexer = models.CharField(_(u'Lexer'), |
d858aae811d0
Move choices for lexer field from SnippetForm to Snippet
dellsystem <ilostwaldo@gmail.com>
parents:
91
diff
changeset
|
35 max_length=30, |
d858aae811d0
Move choices for lexer field from SnippetForm to Snippet
dellsystem <ilostwaldo@gmail.com>
parents:
91
diff
changeset
|
36 choices=LEXER_LIST, |
d858aae811d0
Move choices for lexer field from SnippetForm to Snippet
dellsystem <ilostwaldo@gmail.com>
parents:
91
diff
changeset
|
37 default=LEXER_DEFAULT) |
42
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
38 published = models.DateTimeField(_(u'Published'), blank=True) |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
39 expires = models.DateTimeField(_(u'Expires'), blank=True, help_text='asdf') |
46
b7c1c22fdfe8
Format code for 80 columns, add some js to static/ dir
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
42
diff
changeset
|
40 parent = models.ForeignKey('self', null=True, blank=True, |
b7c1c22fdfe8
Format code for 80 columns, add some js to static/ dir
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
42
diff
changeset
|
41 related_name='children') |
102
f872c643b056
Updates to snippet functionality (see details)
dellsystem <ilostwaldo@gmail.com>
parents:
101
diff
changeset
|
42 num_views = models.IntegerField(default=0) |
42
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
43 |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
44 class Meta: |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
45 ordering = ('-published',) |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
46 |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
47 def get_linecount(self): |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
48 return len(self.content.splitlines()) |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
49 |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
50 def content_splitted(self): |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
51 return self.content_highlighted.splitlines() |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
52 |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
53 def save(self, *args, **kwargs): |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
54 if not self.pk: |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
55 self.published = datetime.datetime.now() |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
56 self.secret_id = generate_secret_id() |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
57 self.content_highlighted = pygmentize(self.content, self.lexer) |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
58 super(Snippet, self).save(*args, **kwargs) |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
59 |
100
365144dad9d1
Add a get_title() method to the Snippet model
dellsystem <ilostwaldo@gmail.com>
parents:
99
diff
changeset
|
60 def get_title(self): |
365144dad9d1
Add a get_title() method to the Snippet model
dellsystem <ilostwaldo@gmail.com>
parents:
99
diff
changeset
|
61 return self.title or _('Snippet #%d' % self.id) |
365144dad9d1
Add a get_title() method to the Snippet model
dellsystem <ilostwaldo@gmail.com>
parents:
99
diff
changeset
|
62 |
108
180404efc8cf
Remove unnecessary import from snippet models.py
dellsystem <ilostwaldo@gmail.com>
parents:
102
diff
changeset
|
63 @models.permalink |
42
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
64 def get_absolute_url(self): |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
65 return ('snippet_details', (self.secret_id,)) |
29
6ba969517b9c
Implement initial profiles, cleanup models, change Free_license to FreeLicense
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
4
diff
changeset
|
66 |
30
f14aaa98306a
Register more apps in the admin site, write an actual template for the user profile page
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
29
diff
changeset
|
67 def __unicode__(self): |
42
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
68 return '%s' % self.secret_id |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
69 |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
70 mptt.register(Snippet, order_insertion_by=['content']) |
ab608f27ecd5
Copy preliminary django-paste code for snippets along with mptt. Works clunkily. Still need to adapt it for Agora.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
30
diff
changeset
|
71 |
30
f14aaa98306a
Register more apps in the admin site, write an actual template for the user profile page
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
29
diff
changeset
|
72 |
29
6ba969517b9c
Implement initial profiles, cleanup models, change Free_license to FreeLicense
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
4
diff
changeset
|
73 class CodeLanguage(models.Model): |
6ba969517b9c
Implement initial profiles, cleanup models, change Free_license to FreeLicense
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
4
diff
changeset
|
74 name = models.CharField(max_length=64) |
30
f14aaa98306a
Register more apps in the admin site, write an actual template for the user profile page
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
29
diff
changeset
|
75 |
f14aaa98306a
Register more apps in the admin site, write an actual template for the user profile page
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
29
diff
changeset
|
76 def __unicode__(self): |
f14aaa98306a
Register more apps in the admin site, write an actual template for the user profile page
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
29
diff
changeset
|
77 return name |