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 |