src/cm/api/handlers.py
author Simon Descarpentries <sid@sopinspace.com>
Tue, 06 May 2014 13:52:01 +0200
changeset 651 9bbc657f6837
parent 463 9c7de6dd1723
permissions -rw-r--r--
Replace DISABLE_TRACKING and TRACKING_HTML by a TRACKING_ID variable in configuration files
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
415
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
     4
from cm.models import Text,TextVersion, Role, UserRole, Comment, Attachment
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
463
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
    10
from cm.views.create import CreateTextContentForm, create_text, CreateTextImportForm, _text_create_import
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
328
2a6033ca510e Select only comments from last version.
gibus
parents: 300
diff changeset
    15
from django.db.models import F
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    16
297
173710f4b6d1 fix settings import
raph
parents: 293
diff changeset
    17
URL_PREFIX = settings.SITE_URL + '/api'
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    18
 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    19
class AnonymousTextHandler(AnonymousBaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    20
    type = "Text methods"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    21
    title = "Read text info"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    22
    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
    23
    allowed_methods = ('GET', )   
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    24
    model = Text
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    25
    desc = """ Read text identified by `key`."""
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    26
    args = None
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    27
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    28
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    29
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    30
        return URL_PREFIX + '/text/{key}/'
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
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    33
    @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
    34
    def read(self, request, key):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    35
        
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    36
        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
    37
        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
    38
        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
    39
        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
    40
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    41
        return text
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    42
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    43
class TextHandler(BaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    44
    type = "Text methods"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    45
    anonymous = AnonymousTextHandler
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    46
    allowed_methods = ('GET',)  
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    47
    no_display = True 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    48
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    49
class AnonymousTextVersionHandler(AnonymousBaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    50
    type = "Text methods"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    51
    title = "Read text version info"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    52
    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
    53
    allowed_methods = ('GET', )   
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    54
    model = Text
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    55
    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
    56
    args = None
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    57
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    58
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    59
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    60
        return URL_PREFIX + '/text/{key}/{version_key}/'
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
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    63
    @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
    64
    def read(self, request, key, version_key):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    65
        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
    66
        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
    67
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    68
        return text_version
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    69
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    70
class TextVersionHandler(BaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    71
    type = "Text methods"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    72
    anonymous = AnonymousTextVersionHandler
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    73
    fields = ('key', 'title', 'format', 'content', 'created', 'modified', 'nb_comments',)   
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    74
    allowed_methods = ('GET', )   
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    75
    model = Text
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    76
    no_display = True 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    77
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    78
    @has_perm_on_text_api('can_view_text')
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    79
    def read(self, request, key, version_key):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    80
        text_version = get_textversion_by_keys_or_404(version_key, key=key)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    81
        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
    82
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    83
        return text_version
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
    84
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    85
class AnonymousTextListHandler(AnonymousBaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    86
    title = "List texts"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    87
    type = "Text methods"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    88
    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
    89
    allowed_methods = ('GET',)   
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    90
    model = Text
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    91
    desc = """Lists texts on workspace."""        
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    92
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    93
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    94
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    95
        return URL_PREFIX + '/text/'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    96
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    97
    def read(self, request):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    98
        order_by = '-id'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
    99
        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
   100
        return texts
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   101
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   102
class TextListHandler(BaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   103
    title = "Create text"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   104
    type = "Text methods"    
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   105
    allowed_methods = ('GET', 'POST')    
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   106
    fields = ('key', 'title', 'created', 'modified', 'nb_comments', 'nb_versions',)   
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   107
    model = Text
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   108
    anonymous = AnonymousTextListHandler
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   109
    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
   110
    args = """<br/>
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   111
`title`: title of the text<br/>
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   112
`format`: format content ('markdown', 'html')<br/>
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   113
`content`: content (in specified format)<br/>
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   114
`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
   115
        """
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   116
     
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   117
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   118
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   119
        return URL_PREFIX + '/text/'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   120
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   121
    def read(self, request):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   122
        order_by = '-id'
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   123
        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
   124
        return texts
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   125
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   126
    def create(self, request):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   127
        form = CreateTextContentForm(request.POST)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   128
        if form.is_valid():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   129
            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
   130
            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
   131
            if anon_role:
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   132
                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
   133
            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
   134
        else:
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   135
            resp = rc.BAD_REQUEST
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   136
        return resp
415
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   137
    
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   138
from cm.converters import _convert_from_mimetype
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   139
import os
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   140
from django.core.urlresolvers import reverse
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   141
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   142
class ConvertHandler(BaseHandler):    
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   143
  type = "Text methods"
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   144
  allowed_methods = ('POST', )    
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   145
  title = "Convert a legacy file"    
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   146
  desc = "Returns the HTLM file."
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   147
  args = """<br />
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   148
`file`: the file in legacy format<br />        
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   149
    """ 
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   150
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   151
  @staticmethod
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   152
  def endpoint():
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   153
    return URL_PREFIX + '/convert/'
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   154
    
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   155
  def create(self, request):
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   156
    mime = request.POST.get('mime', None)
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   157
    the_file = request.FILES['file'];
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   158
    html, attachs = _convert_from_mimetype(the_file.read(), mime, 'html')
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   159
    for attach_file in attachs:
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   160
      attach_data = file(attach_file, 'rb').read()
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   161
      filename = os.path.basename(attach_file)
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   162
      attachment = Attachment.objects.create_attachment(filename=filename, data=attach_data, text_version=None)
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   163
      attach_url = reverse('notext-attach', args=[attachment.key])
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   164
      html = html.replace(filename, settings.SITE_URL + attach_url)
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   165
    return {'html' : html}
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   166
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   167
from cm.exception import UnauthorizedException
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   168
from cm.views.texts import text_delete
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   169
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   170
class TextDeleteHandler(BaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   171
    type = "Text methods"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   172
    allowed_methods = ('POST', )    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   173
    title = "Delete text"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   174
    desc = "Delete the text identified by `key`."
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   175
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   176
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   177
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   178
        return URL_PREFIX + '/text/{key}/delete/'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   179
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   180
    def create(self, request, key):
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   181
        """
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   182
        Delete text identified by `key`.
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   183
        """
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   184
        try:
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   185
            text_delete(request, key=key)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   186
        except UnauthorizedException:
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   187
            return rc.FORBIDDEN
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   188
        except KeyError:
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   189
            return rc.BAD_REQUEST
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   190
        return rc.DELETED
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   191
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   192
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
   193
 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   194
class TextPreEditHandler(BaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   195
    type = "Text methods"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   196
    allowed_methods = ('POST', )    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   197
    title = "Ask for edit impact"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   198
    desc = "Returns the number of impacted comments."
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   199
    args = """<br />
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   200
`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
   201
`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
   202
    """ 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   203
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   204
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   205
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   206
        return URL_PREFIX + '/text/{key}/pre_edit/'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   207
    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   208
    def create(self, request, key):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   209
        return text_pre_edit(request, key=key)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   210
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   211
from cm.views.texts import text_edit
463
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   212
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   213
class TextEditHandler(BaseHandler):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   214
    allowed_methods = ('POST', )    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   215
    type = "Text methods"
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   216
    title = "Edit text"    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   217
    desc = "Update text identified by `key`."
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   218
    args = """<br />
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   219
`title`: new title of the text<br />
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   220
`format`: new format content ('markdown', 'html')<br />
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   221
`content`: new content (in specified format)<br />
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   222
`note`: note to add to edit<br />
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   223
`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
   224
`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
   225
`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
   226
    """ 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   227
    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   228
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   229
    def endpoint():
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   230
        return URL_PREFIX + '/text/{key}/edit/'
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   231
    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   232
    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   233
    def create(self, request, key):
415
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   234
        prev_text = get_text_by_keys_or_404(key)
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   235
        prev_text_version = prev_text.last_text_version
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   236
        prev_comments = prev_text_version.get_comments()
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   237
        prev_scope_removed = [c for c in prev_comments if c.is_scope_removed()]
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   238
        res = text_edit(request, key=key)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   239
        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
   240
        text_version = text.last_text_version
415
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   241
        comments = text_version.get_comments()
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   242
        scope_removed = [c for c in comments if c.is_scope_removed()]
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   243
        return {'version_key' : text_version.key , 'created': text_version.created, 'nb_deleted' : len(prev_comments) - len(comments), 'nb_scope_removed' : len(scope_removed) - len(prev_scope_removed)}
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   244
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   245
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   246
class AnonymousTextFeedHandler(AnonymousBaseHandler):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   247
    allowed_methods = ('GET',)    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   248
    type = "Text methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   249
    title = "Text feed"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   250
    desc = "Returns text RSS feed."
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   251
    args = None
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   252
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   253
    @staticmethod
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   254
    def endpoint():
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   255
        return URL_PREFIX + '/text/{key}/feed/?'
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   256
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   257
    def read(self, request, key):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   258
        return text_feed(request, key=key)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   259
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   260
class TextFeedHandler(BaseHandler):    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   261
    type = "Text methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   262
    anonymous = AnonymousTextFeedHandler
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   263
    allowed_methods = ('GET',)  
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   264
    no_display = True
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   265
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   266
    def read(self, request, key):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   267
        return text_feed(request, key=key)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   268
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   269
class TextVersionRevertHandler(BaseHandler):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   270
    allowed_methods = ('POST', )    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   271
    type = "Text methods"
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   272
    title = "Revert to specific text version"    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   273
    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
   274
    args = """<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   275
`key`: text's key<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   276
`version_key`: key of the version to revert to<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   277
    """ 
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   278
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   279
    @staticmethod
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   280
    def endpoint():
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   281
        return URL_PREFIX + '/text/{key}/{version_key}/revert/'
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   282
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   283
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   284
    def create(self, request, key, version_key):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   285
        text_version = get_textversion_by_keys_or_404(version_key, key=key)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   286
        new_text_version = text_version.text.revert_to_version(version_key)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   287
        return {'version_key' : new_text_version.key , 'created': new_text_version.created}
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   288
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   289
class TextVersionDeleteHandler(BaseHandler):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   290
    allowed_methods = ('POST', )    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   291
    type = "Text methods"
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   292
    title = "Delete a specific text version"    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   293
    desc = "Delete a text version."
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   294
    args = """<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   295
`key`: text's key<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   296
`version_key`: key of the version to delete<br />
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   297
    """ 
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   298
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   299
    @staticmethod
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   300
    def endpoint():
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   301
        return URL_PREFIX + '/text/{key}/{version_key}/delete/'
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   302
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   303
    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   304
    def create(self, request, key, version_key):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   305
        text_version = get_textversion_by_keys_or_404(version_key, key=key)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   306
        text_version.delete()
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   307
        return rc.ALL_OK    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   308
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   309
## client methods
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
class AnonymousClientHandler(AnonymousBaseHandler):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   312
    allowed_methods = ('POST',)    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   313
    type = "Client methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   314
    title = "Handles client methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   315
    desc = "Handles client (ajax text view) methods."
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   316
    args = """<br />
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   317
post arguments
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
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   320
    @staticmethod
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   321
    def endpoint():
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   322
        return URL_PREFIX + '/client/'
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   323
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   324
    def create(self, request):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   325
        return client_exchange(request)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   326
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   327
class ClientHandler(BaseHandler):    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   328
    type = "Client methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   329
    anonymous = AnonymousClientHandler
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   330
    allowed_methods = ('POST',)  
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   331
    no_display = True 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   332
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   333
    def create(self, request):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   334
        return client_exchange(request)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   335
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   336
## embed methods
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   337
from django.views.i18n import javascript_catalog
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   338
from cm.urls import js_info_dict
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   339
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   340
class JSI18NHandler(AnonymousBaseHandler):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   341
    allowed_methods = ('GET',)    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   342
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   343
    title = "Get js i18n dicts"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   344
    desc = ""
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   345
    args = None
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   346
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   347
    @staticmethod
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   348
    def endpoint():
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   349
        return URL_PREFIX + '/jsi18n/'
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   350
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   351
    def read(self, request):
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   352
        return javascript_catalog(request, **js_info_dict)
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   353
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   354
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   355
class AnonymousCommentFrameHandler(AnonymousBaseHandler):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   356
    allowed_methods = ('GET',)    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   357
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   358
    title = "Displays embedable frame"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   359
    desc = ""
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   360
    args = None
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   361
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   362
    @staticmethod
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   363
    def endpoint():
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   364
        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
   365
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):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   368
        return text_view_frame(request, key=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
class CommentFrameHandler(BaseHandler):    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   371
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   372
    anonymous = AnonymousCommentFrameHandler
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   373
    allowed_methods = ('GET',)  
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   374
    no_display = True 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   375
299
34b4038e3069 check with api version of security checking prior to fun call
raph
parents: 297
diff changeset
   376
    @has_perm_on_text_api('can_view_text')
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   377
    def read(self, request, key):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   378
        return text_view_frame(request, key=key)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   379
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   380
class AnonymousCommentHandler(AnonymousBaseHandler):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   381
    allowed_methods = ('GET',)    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   382
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   383
    title = "Displays embedable frame"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   384
    no_display = True 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   385
    desc = ""
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   386
    args = None
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   387
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   388
    @staticmethod
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   389
    def endpoint():
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   390
        return URL_PREFIX + '/text/{key}/comments/{version_key}/?'
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   391
    
299
34b4038e3069 check with api version of security checking prior to fun call
raph
parents: 297
diff changeset
   392
    @has_perm_on_text_api('can_view_text')    
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   393
    def read(self, request, key, version_key):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   394
        return text_view_comments(request, key=key, version_key=version_key)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   395
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   396
class CommentHandler(BaseHandler):    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   397
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   398
    anonymous = AnonymousCommentHandler
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   399
    allowed_methods = ('GET',)  
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   400
    no_display = True 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   401
299
34b4038e3069 check with api version of security checking prior to fun call
raph
parents: 297
diff changeset
   402
    @has_perm_on_text_api('can_view_text')
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   403
    def read(self, request, key, version_key):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   404
        return text_view_comments(request, key=key, version_key=version_key)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   405
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   406
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   407
class AnonymousTextExportHandler(AnonymousBaseHandler):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   408
    allowed_methods = ('POST',)    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   409
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   410
    title = "undocumented"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   411
    no_display = True 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   412
    desc = ""
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   413
    args = None
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   414
    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   415
    @staticmethod
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   416
    def endpoint():
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   417
        return URL_PREFIX + ' undocumented'
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   418
    
299
34b4038e3069 check with api version of security checking prior to fun call
raph
parents: 297
diff changeset
   419
    @has_perm_on_text_api('can_view_text')    
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   420
    def create(self, request, key, format, download, whichcomments, withcolor):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   421
        return text_export(request, key, format, download, whichcomments, withcolor, adminkey=None)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   422
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   423
class TextExportHandler(BaseHandler):    
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   424
    type = "Embed methods"
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   425
    anonymous = AnonymousTextExportHandler
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   426
    allowed_methods = ('POST',)  
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   427
    no_display = True 
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   428
299
34b4038e3069 check with api version of security checking prior to fun call
raph
parents: 297
diff changeset
   429
    @has_perm_on_text_api('can_view_text')
288
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   430
    def create(self, request, key, format, download, whichcomments, withcolor):
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   431
        return text_export(request, key, format, download, whichcomments, withcolor, adminkey=None)
c6fe4822a243 fix delete method / fix anon resources
raph
parents: 287
diff changeset
   432
463
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   433
class ImportHandler(BaseHandler):
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   434
    allowed_methods = ('POST', )    
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   435
    type = "Text methods"
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   436
    title = "Import text and comments"
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   437
    desc = "Import a previously exported text, along with comments and attachments in XML format."
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   438
    args = """<br />
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   439
`xml`: Previously exported XML file of text, comments and attachments<br />
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   440
    """ 
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   441
    
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   442
    @staticmethod
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   443
    def endpoint():
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   444
        return URL_PREFIX + '/import/'
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   445
    
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   446
    
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   447
    def create(self, request):
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   448
      text, res = _text_create_import(request, CreateTextImportForm)
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   449
      text_version = text.last_text_version
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   450
      return {'key' : text.key , 'version_key' : text.last_text_version.key, 'html': text_version.content}
9c7de6dd1723 Fix import for use with api (with co_ment Drupal module for eg.).
gibus
parents: 415
diff changeset
   451
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   452
class AnonymousCommentsHandler(AnonymousBaseHandler):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   453
    allowed_methods = ('GET',)    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   454
    type = "Comment methods"
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   455
    fields = ('id_key', 'title', 'format', 'content', 'created', 'name', ('text_version' , ('key', ('text', ('key',))) ))   
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   456
    model = Comment    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   457
    title = "Get comments"
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   458
    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
   459
    args = """<br />
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   460
`keys`: (optional) comma separated keys : limit comments from these texts only<br />
336
f7fb42d3f526 api doc
gibus
parents: 335
diff changeset
   461
`comment_key`: (optional) get only this comment
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   462
`name`: (optional) limit comments from this user only
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   463
`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
   464
    """ 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   465
    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   466
    @staticmethod
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   467
    def endpoint():
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   468
        return URL_PREFIX + '/comments/'
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   469
    
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   470
    def read(self, request):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   471
        name = request.GET.get('name', None)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   472
        limit = request.GET.get('limit', None)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   473
        keys = request.GET.get('keys', None)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   474
        query = Comment.objects.all()
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   475
        if keys:            
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   476
            query = query.filter(text_version__text__key__in=keys.split(','))
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   477
        if name:
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   478
            query = query.filter(name=name)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   479
        query = query.order_by('-created')
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   480
        if limit:
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   481
            query = query[:int(limit)]
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   482
        return query
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   483
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   484
class CommentsHandler(BaseHandler):    
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   485
    type = "Comment methods"
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   486
    anonymous = AnonymousCommentsHandler
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   487
    allowed_methods = ('GET',)  
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   488
    fields = ('id_key', 'title', 'format', 'content', 'created', 'name', ('text_version' , ('key', ('text', ('key',))) ))   
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   489
    model = Comment
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   490
    no_display = True 
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   491
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   492
    def read(self, request):
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   493
        name = request.GET.get('name', None)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   494
        limit = request.GET.get('limit', None)
335
74dbc5568bbd add comment_key optional parameter for /api/comments/ to fetch a single comment
gibus
parents: 328
diff changeset
   495
        comment_key = request.GET.get('comment_key', None)
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   496
        keys = request.GET.get('keys', None)
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   497
        query = Comment.objects.all()
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   498
        if keys:            
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   499
            query = query.filter(text_version__text__key__in=keys.split(','))
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   500
        if name:
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   501
            query = query.filter(name=name)
335
74dbc5568bbd add comment_key optional parameter for /api/comments/ to fetch a single comment
gibus
parents: 328
diff changeset
   502
        if comment_key:
74dbc5568bbd add comment_key optional parameter for /api/comments/ to fetch a single comment
gibus
parents: 328
diff changeset
   503
            query = query.filter(id_key=comment_key)
328
2a6033ca510e Select only comments from last version.
gibus
parents: 300
diff changeset
   504
        query = query.filter(text_version__text__last_text_version__exact=F('text_version__id'))
293
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   505
        query = query.order_by('-created')
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   506
        if limit:
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   507
            query = query[:int(limit)]
2c52e4453bf7 api update (incl. doc)
raph
parents: 288
diff changeset
   508
        return query
415
bacf162c7b58 Adds api/convert to return HTML document from legacy format + Saves attached images when just converting to HTML, without creating a text + Returns nb of detached and removed commentswhen updating text.
gibus
parents: 336
diff changeset
   509
287
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   510
from piston.doc import documentation_view
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   511
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   512
from piston.handler import handler_tracker
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   513
from django.template import RequestContext
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   514
from piston.doc import generate_doc
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   515
from django.shortcuts import render_to_response
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   516
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   517
def documentation(request):
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   518
    """
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   519
    Generic documentation view. Generates documentation
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   520
    from the handlers you've defined.
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   521
    """
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   522
    docs = [ ]
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   523
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   524
    for handler in handler_tracker:
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   525
        doc = generate_doc(handler)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   526
        setattr(doc,'type', handler.type)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   527
        docs.append(doc)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   528
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   529
    def _compare(doc1, doc2): 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   530
       #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
   531
       name1 = doc1.name.replace("Anonymous", "")
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   532
       name2 = doc2.name.replace("Anonymous", "")
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   533
       return cmp(name1, name2)    
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   534
 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   535
    #docs.sort(_compare)
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   536
       
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   537
    return render_to_response('api_doc.html', 
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   538
        { 'docs': docs }, RequestContext(request))
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   539
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   540
from piston.doc import generate_doc
fc5ed157ebfe add api: basic auth / unit tests / online doc (based on django-piston)
raph
parents:
diff changeset
   541
DocHandler = generate_doc(TextPreEditHandler)