src/cm/api/handlers.py
changeset 415 bacf162c7b58
parent 336 f7fb42d3f526
child 463 9c7de6dd1723
equal deleted inserted replaced
414:ef8b166a0993 415:bacf162c7b58
     1 from piston.handler import AnonymousBaseHandler, BaseHandler
     1 from piston.handler import AnonymousBaseHandler, BaseHandler
     2 from piston.utils import rc
     2 from piston.utils import rc
     3 
     3 
     4 from cm.models import Text,TextVersion, Role, UserRole, Comment
     4 from cm.models import Text,TextVersion, Role, UserRole, Comment, Attachment
     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
     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
     6 from cm.security import get_texts_with_perm, has_perm, get_viewable_comments, \
     6 from cm.security import get_texts_with_perm, has_perm, get_viewable_comments, \
     7     has_perm_on_text_api
     7     has_perm_on_text_api
     8 from cm.security import get_viewable_comments
     8 from cm.security import get_viewable_comments
     9 from cm.utils.embed import embed_html
     9 from cm.utils.embed import embed_html
   132                 userrole = UserRole.objects.create(user=None, role=Role.objects.get(id=anon_role), text=text)         
   132                 userrole = UserRole.objects.create(user=None, role=Role.objects.get(id=anon_role), text=text)         
   133             return {'key' : text.key , 'version_key' : text.last_text_version.key, 'created': text.created}
   133             return {'key' : text.key , 'version_key' : text.last_text_version.key, 'created': text.created}
   134         else:
   134         else:
   135             resp = rc.BAD_REQUEST
   135             resp = rc.BAD_REQUEST
   136         return resp
   136         return resp
       
   137     
       
   138 from cm.converters import _convert_from_mimetype
       
   139 import os
       
   140 from django.core.urlresolvers import reverse
       
   141 
       
   142 class ConvertHandler(BaseHandler):    
       
   143   type = "Text methods"
       
   144   allowed_methods = ('POST', )    
       
   145   title = "Convert a legacy file"    
       
   146   desc = "Returns the HTLM file."
       
   147   args = """<br />
       
   148 `file`: the file in legacy format<br />        
       
   149     """ 
       
   150 
       
   151   @staticmethod
       
   152   def endpoint():
       
   153     return URL_PREFIX + '/convert/'
       
   154     
       
   155   def create(self, request):
       
   156     mime = request.POST.get('mime', None)
       
   157     the_file = request.FILES['file'];
       
   158     html, attachs = _convert_from_mimetype(the_file.read(), mime, 'html')
       
   159     for attach_file in attachs:
       
   160       attach_data = file(attach_file, 'rb').read()
       
   161       filename = os.path.basename(attach_file)
       
   162       attachment = Attachment.objects.create_attachment(filename=filename, data=attach_data, text_version=None)
       
   163       attach_url = reverse('notext-attach', args=[attachment.key])
       
   164       html = html.replace(filename, settings.SITE_URL + attach_url)
       
   165     return {'html' : html}
   137 
   166 
   138 from cm.exception import UnauthorizedException
   167 from cm.exception import UnauthorizedException
   139 from cm.views.texts import text_delete
   168 from cm.views.texts import text_delete
   140 
   169 
   141 class TextDeleteHandler(BaseHandler):
   170 class TextDeleteHandler(BaseHandler):
   200     def endpoint():
   229     def endpoint():
   201         return URL_PREFIX + '/text/{key}/edit/'
   230         return URL_PREFIX + '/text/{key}/edit/'
   202     
   231     
   203     
   232     
   204     def create(self, request, key):
   233     def create(self, request, key):
       
   234         prev_text = get_text_by_keys_or_404(key)
       
   235         prev_text_version = prev_text.last_text_version
       
   236         prev_comments = prev_text_version.get_comments()
       
   237         prev_scope_removed = [c for c in prev_comments if c.is_scope_removed()]
   205         res = text_edit(request, key=key)
   238         res = text_edit(request, key=key)
   206         text = get_text_by_keys_or_404(key)
   239         text = get_text_by_keys_or_404(key)
   207         text_version = text.last_text_version
   240         text_version = text.last_text_version
   208         return {'version_key' : text_version.key , 'created': text_version.created}
   241         comments = text_version.get_comments()
       
   242         scope_removed = [c for c in comments if c.is_scope_removed()]
       
   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)}
   209 
   244 
   210 
   245 
   211 class AnonymousTextFeedHandler(AnonymousBaseHandler):
   246 class AnonymousTextFeedHandler(AnonymousBaseHandler):
   212     allowed_methods = ('GET',)    
   247     allowed_methods = ('GET',)    
   213     type = "Text methods"
   248     type = "Text methods"
   450         query = query.filter(text_version__text__last_text_version__exact=F('text_version__id'))
   485         query = query.filter(text_version__text__last_text_version__exact=F('text_version__id'))
   451         query = query.order_by('-created')
   486         query = query.order_by('-created')
   452         if limit:
   487         if limit:
   453             query = query[:int(limit)]
   488             query = query[:int(limit)]
   454         return query
   489         return query
   455     
   490 
   456 from piston.doc import documentation_view
   491 from piston.doc import documentation_view
   457 
   492 
   458 from piston.handler import handler_tracker
   493 from piston.handler import handler_tracker
   459 from django.template import RequestContext
   494 from django.template import RequestContext
   460 from piston.doc import generate_doc
   495 from piston.doc import generate_doc