src/cm/api/handlers.py
author gibus
Tue, 02 Nov 2010 10:15:41 +0100
changeset 327 d858c3bb07fe
parent 300 7aaf5c0d6af4
child 328 2a6033ca510e
permissions -rw-r--r--
save prototype for django new version (1.2.3)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
     1
from piston.handler import AnonymousBaseHandler, BaseHandler
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
     2
from piston.utils import rc
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
     3
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
     4
from cm.models import Text,TextVersion, Role, UserRole, Comment
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
     5
from cm.views import get_keys_from_dict, get_textversion_by_keys_or_404, get_text_by_keys_or_404, get_textversion_by_keys_or_404, redirect
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
     6
from cm.security import get_texts_with_perm, has_perm, get_viewable_comments, \
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
     7
    has_perm_on_text_api
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
     8
from cm.security import get_viewable_comments
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
     9
from cm.utils.embed import embed_html
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    10
from cm.views.create import CreateTextContentForm, create_text
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
    11
from cm.views.texts import client_exchange, text_view_frame, text_view_comments, text_export
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
    12
from cm.views.feeds import text_feed
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    13
from piston.utils import validate
297
173710f4b6d1 fix settings import
raph
parents: 293
diff changeset
    14
from django.conf import settings
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    15
297
173710f4b6d1 fix settings import
raph
parents: 293
diff changeset
    16
URL_PREFIX = settings.SITE_URL + '/api'
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    17
 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    18
class AnonymousTextHandler(AnonymousBaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    19
    type = "Text methods"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    20
    title = "Read text info"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    21
    fields = ('key', 'title', 'format', 'content', 'created', 'modified', 'nb_comments', 'nb_versions', 'embed_html', ('last_text_version', ('created','modified', 'format', 'title', 'content')))   
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    22
    allowed_methods = ('GET', )   
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    23
    model = Text
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    24
    desc = """ Read text identified by `key`."""
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    25
    args = None
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    26
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    27
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    28
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    29
        return URL_PREFIX + '/text/{key}/'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    30
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    31
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    32
    @has_perm_on_text_api('can_view_text')
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    33
    def read(self, request, key):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    34
        
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    35
        text = get_text_by_keys_or_404(key)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    36
        setattr(text,'nb_comments',len(get_viewable_comments(request, text.last_text_version.comment_set.all(), text)))
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    37
        setattr(text,'nb_versions',text.get_versions_number())
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    38
        setattr(text,'embed_html',embed_html(text.key))
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    39
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    40
        return text
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    41
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    42
class TextHandler(BaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    43
    type = "Text methods"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    44
    anonymous = AnonymousTextHandler
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    45
    allowed_methods = ('GET',)  
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    46
    no_display = True 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    47
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    48
class AnonymousTextVersionHandler(AnonymousBaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    49
    type = "Text methods"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    50
    title = "Read text version info"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    51
    fields = ('key', 'title', 'format', 'content', 'created', 'modified', 'nb_comments',)   
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    52
    allowed_methods = ('GET', )   
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    53
    model = Text
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    54
    desc = """ Read text version identified by `version_key` inside text identified by `key`."""
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    55
    args = None
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    56
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    57
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    58
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    59
        return URL_PREFIX + '/text/{key}/{version_key}/'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    60
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    61
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    62
    @has_perm_on_text_api('can_view_text')
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    63
    def read(self, request, key, version_key):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    64
        text_version = get_textversion_by_keys_or_404(version_key, key=key)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    65
        setattr(text_version,'nb_comments',len(get_viewable_comments(request, text_version.comment_set.all(), text_version.text)))
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    66
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    67
        return text_version
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    68
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    69
class TextVersionHandler(BaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    70
    type = "Text methods"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    71
    anonymous = AnonymousTextVersionHandler
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    72
    fields = ('key', 'title', 'format', 'content', 'created', 'modified', 'nb_comments',)   
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    73
    allowed_methods = ('GET', )   
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    74
    model = Text
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    75
    no_display = True 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    76
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    77
    @has_perm_on_text_api('can_view_text')
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    78
    def read(self, request, key, version_key):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    79
        text_version = get_textversion_by_keys_or_404(version_key, key=key)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    80
        setattr(text_version,'nb_comments',len(get_viewable_comments(request, text_version.comment_set.all(), text_version.text)))
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    81
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    82
        return text_version
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    83
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    84
class AnonymousTextListHandler(AnonymousBaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    85
    title = "List texts"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    86
    type = "Text methods"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    87
    fields = ('key', 'title', 'created', 'modified', 'nb_comments', 'nb_versions',)   
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    88
    allowed_methods = ('GET',)   
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    89
    model = Text
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    90
    desc = """Lists texts on workspace."""        
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    91
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    92
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    93
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    94
        return URL_PREFIX + '/text/'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    95
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    96
    def read(self, request):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    97
        order_by = '-id'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    98
        texts = get_texts_with_perm(request, 'can_view_text').order_by(order_by)        
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    99
        return texts
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   100
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   101
class TextListHandler(BaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   102
    title = "Create text"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   103
    type = "Text methods"    
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   104
    allowed_methods = ('GET', 'POST')    
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   105
    fields = ('key', 'title', 'created', 'modified', 'nb_comments', 'nb_versions',)   
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   106
    model = Text
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   107
    anonymous = AnonymousTextListHandler
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   108
    desc = "Create a text with the provided parameters."
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   109
    args = """<br/>
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   110
`title`: title of the text<br/>
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   111
`format`: format content ('markdown', 'html')<br/>
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   112
`content`: content (in specified format)<br/>
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   113
`anon_role`: role to give to anon users: null, 4: commentator, 5: observer<br/>
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   114
        """
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   115
     
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   116
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   117
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   118
        return URL_PREFIX + '/text/'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   119
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   120
    def read(self, request):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   121
        order_by = '-id'
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   122
        texts = get_texts_with_perm(request, 'can_view_text').order_by(order_by)        
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   123
        return texts
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   124
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   125
    def create(self, request):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   126
        form = CreateTextContentForm(request.POST)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   127
        if form.is_valid():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   128
            text = create_text(request.user, form.cleaned_data)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   129
            anon_role = request.POST.get('anon_role', None)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   130
            if anon_role:
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   131
                userrole = UserRole.objects.create(user=None, role=Role.objects.get(id=anon_role), text=text)         
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   132
            return {'key' : text.key , 'version_key' : text.last_text_version.key, 'created': text.created}
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   133
        else:
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   134
            resp = rc.BAD_REQUEST
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   135
        return resp
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   136
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   137
from cm.exception import UnauthorizedException
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   138
from cm.views.texts import text_delete
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   139
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   140
class TextDeleteHandler(BaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   141
    type = "Text methods"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   142
    allowed_methods = ('POST', )    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   143
    title = "Delete text"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   144
    desc = "Delete the text identified by `key`."
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   145
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   146
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   147
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   148
        return URL_PREFIX + '/text/{key}/delete/'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   149
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   150
    def create(self, request, key):
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   151
        """
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   152
        Delete text identified by `key`.
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   153
        """
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   154
        try:
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   155
            text_delete(request, key=key)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   156
        except UnauthorizedException:
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   157
            return rc.FORBIDDEN
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   158
        except KeyError:
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   159
            return rc.BAD_REQUEST
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   160
        return rc.DELETED
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   161
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   162
from cm.views.texts import text_pre_edit
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   163
 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   164
class TextPreEditHandler(BaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   165
    type = "Text methods"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   166
    allowed_methods = ('POST', )    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   167
    title = "Ask for edit impact"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   168
    desc = "Returns the number of impacted comments."
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   169
    args = """<br />
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   170
`new_format`: new format content ('markdown', 'html')<br />        
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   171
`new_content`: new content (in specified format)<br />    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   172
    """ 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   173
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   174
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   175
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   176
        return URL_PREFIX + '/text/{key}/pre_edit/'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   177
    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   178
    def create(self, request, key):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   179
        return text_pre_edit(request, key=key)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   180
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   181
from cm.views.texts import text_edit
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   182
    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   183
class TextEditHandler(BaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   184
    allowed_methods = ('POST', )    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   185
    type = "Text methods"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   186
    title = "Edit text"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   187
    desc = "Update text identified by `key`."
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   188
    args = """<br />
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   189
`title`: new title of the text<br />
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   190
`format`: new format content ('markdown', 'html')<br />
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   191
`content`: new content (in specified format)<br />
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   192
`note`: note to add to edit<br />
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   193
`new_version`: boolean: should a new version of the text be created?<br />
300
7aaf5c0d6af4 doc api: add cancel_modified_scopes as parameter of Edit text
gibus
parents: 299
diff changeset
   194
`keep_comments`: boolean: should existing comments be kept (if possible)?<br />
7aaf5c0d6af4 doc api: add cancel_modified_scopes as parameter of Edit text
gibus
parents: 299
diff changeset
   195
`cancel_modified_scopes`: if set to 1, existing comments without scope in a new version are detached, otherwise they are deleted<br />
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   196
    """ 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   197
    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   198
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   199
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   200
        return URL_PREFIX + '/text/{key}/edit/'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   201
    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   202
    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   203
    def create(self, request, key):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   204
        res = text_edit(request, key=key)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   205
        text = get_text_by_keys_or_404(key)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   206
        text_version = text.last_text_version
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   207
        return {'version_key' : text_version.key , 'created': text_version.created}
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   208
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   209
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   210
class AnonymousTextFeedHandler(AnonymousBaseHandler):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   211
    allowed_methods = ('GET',)    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   212
    type = "Text methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   213
    title = "Text feed"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   214
    desc = "Returns text RSS feed."
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   215
    args = None
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   216
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   217
    @staticmethod
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   218
    def endpoint():
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   219
        return URL_PREFIX + '/text/{key}/feed/?'
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   220
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   221
    def read(self, request, key):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   222
        return text_feed(request, key=key)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   223
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   224
class TextFeedHandler(BaseHandler):    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   225
    type = "Text methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   226
    anonymous = AnonymousTextFeedHandler
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   227
    allowed_methods = ('GET',)  
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   228
    no_display = True
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   229
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   230
    def read(self, request, key):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   231
        return text_feed(request, key=key)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   232
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   233
class TextVersionRevertHandler(BaseHandler):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   234
    allowed_methods = ('POST', )    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   235
    type = "Text methods"
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   236
    title = "Revert to specific text version"    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   237
    desc = "Revert to a text version (i.e. copy this text_version which becomes the last text_version)."
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   238
    args = """<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   239
`key`: text's key<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   240
`version_key`: key of the version to revert to<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   241
    """ 
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   242
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   243
    @staticmethod
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   244
    def endpoint():
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   245
        return URL_PREFIX + '/text/{key}/{version_key}/revert/'
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   246
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   247
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   248
    def create(self, request, key, version_key):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   249
        text_version = get_textversion_by_keys_or_404(version_key, key=key)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   250
        new_text_version = text_version.text.revert_to_version(version_key)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   251
        return {'version_key' : new_text_version.key , 'created': new_text_version.created}
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   252
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   253
class TextVersionDeleteHandler(BaseHandler):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   254
    allowed_methods = ('POST', )    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   255
    type = "Text methods"
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   256
    title = "Delete a specific text version"    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   257
    desc = "Delete a text version."
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   258
    args = """<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   259
`key`: text's key<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   260
`version_key`: key of the version to delete<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   261
    """ 
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   262
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   263
    @staticmethod
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   264
    def endpoint():
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   265
        return URL_PREFIX + '/text/{key}/{version_key}/delete/'
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   266
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   267
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   268
    def create(self, request, key, version_key):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   269
        text_version = get_textversion_by_keys_or_404(version_key, key=key)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   270
        text_version.delete()
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   271
        return rc.ALL_OK    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   272
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   273
## client methods
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   274
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   275
class AnonymousClientHandler(AnonymousBaseHandler):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   276
    allowed_methods = ('POST',)    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   277
    type = "Client methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   278
    title = "Handles client methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   279
    desc = "Handles client (ajax text view) methods."
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   280
    args = """<br />
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   281
post arguments
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   282
    """ 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   283
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   284
    @staticmethod
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   285
    def endpoint():
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   286
        return URL_PREFIX + '/client/'
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   287
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   288
    def create(self, request):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   289
        return client_exchange(request)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   290
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   291
class ClientHandler(BaseHandler):    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   292
    type = "Client methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   293
    anonymous = AnonymousClientHandler
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   294
    allowed_methods = ('POST',)  
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   295
    no_display = True 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   296
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   297
    def create(self, request):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   298
        return client_exchange(request)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   299
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   300
## embed methods
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   301
from django.views.i18n import javascript_catalog
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   302
from cm.urls import js_info_dict
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   303
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   304
class JSI18NHandler(AnonymousBaseHandler):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   305
    allowed_methods = ('GET',)    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   306
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   307
    title = "Get js i18n dicts"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   308
    desc = ""
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   309
    args = None
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   310
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   311
    @staticmethod
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   312
    def endpoint():
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   313
        return URL_PREFIX + '/jsi18n/'
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   314
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   315
    def read(self, request):
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   316
        return javascript_catalog(request, **js_info_dict)
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   317
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   318
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   319
class AnonymousCommentFrameHandler(AnonymousBaseHandler):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   320
    allowed_methods = ('GET',)    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   321
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   322
    title = "Displays embedable frame"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   323
    desc = ""
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   324
    args = None
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   325
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   326
    @staticmethod
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   327
    def endpoint():
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   328
        return URL_PREFIX + '/text/{key}/comments_frame/?prefix=/api'
299
34b4038e3069 check with api version of security checking prior to fun call
raph
parents: 297
diff changeset
   329
34b4038e3069 check with api version of security checking prior to fun call
raph
parents: 297
diff changeset
   330
    @has_perm_on_text_api('can_view_text')    
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   331
    def read(self, request, key):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   332
        return text_view_frame(request, key=key)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   333
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   334
class CommentFrameHandler(BaseHandler):    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   335
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   336
    anonymous = AnonymousCommentFrameHandler
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   337
    allowed_methods = ('GET',)  
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   338
    no_display = True 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   339
299
34b4038e3069 check with api version of security checking prior to fun call
raph
parents: 297
diff changeset
   340
    @has_perm_on_text_api('can_view_text')
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   341
    def read(self, request, key):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   342
        return text_view_frame(request, key=key)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   343
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   344
class AnonymousCommentHandler(AnonymousBaseHandler):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   345
    allowed_methods = ('GET',)    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   346
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   347
    title = "Displays embedable frame"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   348
    no_display = True 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   349
    desc = ""
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   350
    args = None
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   351
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   352
    @staticmethod
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   353
    def endpoint():
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   354
        return URL_PREFIX + '/text/{key}/comments/{version_key}/?'
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   355
    
299
34b4038e3069 check with api version of security checking prior to fun call
raph
parents: 297
diff changeset
   356
    @has_perm_on_text_api('can_view_text')    
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   357
    def read(self, request, key, version_key):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   358
        return text_view_comments(request, key=key, version_key=version_key)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   359
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   360
class CommentHandler(BaseHandler):    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   361
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   362
    anonymous = AnonymousCommentHandler
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   363
    allowed_methods = ('GET',)  
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   364
    no_display = True 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   365
299
34b4038e3069 check with api version of security checking prior to fun call
raph
parents: 297
diff changeset
   366
    @has_perm_on_text_api('can_view_text')
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   367
    def read(self, request, key, version_key):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   368
        return text_view_comments(request, key=key, version_key=version_key)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   369
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   370
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   371
class AnonymousTextExportHandler(AnonymousBaseHandler):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   372
    allowed_methods = ('POST',)    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   373
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   374
    title = "undocumented"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   375
    no_display = True 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   376
    desc = ""
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   377
    args = None
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   378
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   379
    @staticmethod
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   380
    def endpoint():
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   381
        return URL_PREFIX + ' undocumented'
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   382
    
299
34b4038e3069 check with api version of security checking prior to fun call
raph
parents: 297
diff changeset
   383
    @has_perm_on_text_api('can_view_text')    
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   384
    def create(self, request, key, format, download, whichcomments, withcolor):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   385
        return text_export(request, key, format, download, whichcomments, withcolor, adminkey=None)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   386
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   387
class TextExportHandler(BaseHandler):    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   388
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   389
    anonymous = AnonymousTextExportHandler
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   390
    allowed_methods = ('POST',)  
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   391
    no_display = True 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   392
299
34b4038e3069 check with api version of security checking prior to fun call
raph
parents: 297
diff changeset
   393
    @has_perm_on_text_api('can_view_text')
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   394
    def create(self, request, key, format, download, whichcomments, withcolor):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   395
        return text_export(request, key, format, download, whichcomments, withcolor, adminkey=None)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   396
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   397
class AnonymousCommentsHandler(AnonymousBaseHandler):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   398
    allowed_methods = ('GET',)    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   399
    type = "Comment methods"
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   400
    fields = ('id_key', 'title', 'format', 'content', 'created', 'name', ('text_version' , ('key', ('text', ('key',))) ))   
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   401
    model = Comment    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   402
    title = "Get comments"
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   403
    desc = "Get comments from the workspace, most recent first."
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   404
    args = """<br />
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   405
`keys`: (optional) comma separated keys : limit comments from these texts only<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   406
`name`: (optional) limit comments from this user only
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   407
`limit`: (optional) limit number of comments returned
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   408
    """ 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   409
    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   410
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   411
    def endpoint():
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   412
        return URL_PREFIX + '/comments/'
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   413
    
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   414
    def read(self, request):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   415
        name = request.GET.get('name', None)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   416
        limit = request.GET.get('limit', None)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   417
        keys = request.GET.get('keys', None)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   418
        query = Comment.objects.all()
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   419
        if keys:            
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   420
            query = query.filter(text_version__text__key__in=keys.split(','))
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   421
        if name:
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   422
            query = query.filter(name=name)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   423
        query = query.order_by('-created')
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   424
        if limit:
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   425
            query = query[:int(limit)]
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   426
        return query
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   427
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   428
class CommentsHandler(BaseHandler):    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   429
    type = "Comment methods"
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   430
    anonymous = AnonymousCommentsHandler
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   431
    allowed_methods = ('GET',)  
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   432
    fields = ('id_key', 'title', 'format', 'content', 'created', 'name', ('text_version' , ('key', ('text', ('key',))) ))   
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   433
    model = Comment
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   434
    no_display = True 
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   435
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   436
    def read(self, request):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   437
        name = request.GET.get('name', None)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   438
        limit = request.GET.get('limit', None)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   439
        keys = request.GET.get('keys', None)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   440
        query = Comment.objects.all()
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   441
        if keys:            
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   442
            query = query.filter(text_version__text__key__in=keys.split(','))
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   443
        if name:
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   444
            query = query.filter(name=name)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   445
        query = query.order_by('-created')
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   446
        if limit:
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   447
            query = query[:int(limit)]
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   448
        return query
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   449
    
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   450
from piston.doc import documentation_view
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   451
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   452
from piston.handler import handler_tracker
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   453
from django.template import RequestContext
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   454
from piston.doc import generate_doc
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   455
from django.shortcuts import render_to_response
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   456
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   457
def documentation(request):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   458
    """
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   459
    Generic documentation view. Generates documentation
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   460
    from the handlers you've defined.
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   461
    """
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   462
    docs = [ ]
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   463
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   464
    for handler in handler_tracker:
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   465
        doc = generate_doc(handler)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   466
        setattr(doc,'type', handler.type)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   467
        docs.append(doc)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   468
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   469
    def _compare(doc1, doc2): 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   470
       #handlers and their anonymous counterparts are put next to each other.
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   471
       name1 = doc1.name.replace("Anonymous", "")
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   472
       name2 = doc2.name.replace("Anonymous", "")
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   473
       return cmp(name1, name2)    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   474
 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   475
    #docs.sort(_compare)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   476
       
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   477
    return render_to_response('api_doc.html', 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   478
        { 'docs': docs }, RequestContext(request))
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   479
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   480
from piston.doc import generate_doc
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   481
DocHandler = generate_doc(TextPreEditHandler)