def _download_module(self, module_url): request = self.request session = request.session conn = sword2cnx.Connection(session['login'].service_document_url, user_name=session['login'].username, user_pass=session['login'].password, always_authenticate=True, download_service_document=False) parts = urlparse.urlsplit(module_url) path = parts.path.split('/') path = path[:path.index('sword')] module_url = '%s://%s%s' % (parts.scheme, parts.netloc, '/'.join(path)) # example: http://cnx.org/Members/user001/m17222/sword/editmedia zip_file = conn.get_cnx_module(module_url = module_url, packaging = 'zip') save_dir = get_save_dir(request) if save_dir is None: request.session['upload_dir'], save_dir = create_save_dir(request) extract_to_save_dir(zip_file, save_dir) cnxml_file = open(os.path.join(save_dir, 'index.cnxml'), 'rb') cnxml = cnxml_file.read() cnxml_file.close() conversionerror = None try: htmlpreview = cnxml_to_htmlpreview(cnxml) save_and_backup_file(save_dir, 'index.html', htmlpreview) files = get_files(save_dir) save_zip(save_dir, cnxml, htmlpreview, files) except libxml2.parserError: conversionerror = traceback.format_exc() raise ConversionError(conversionerror)
def preview_save(request): check_login(request) html = request.POST['html'] if isinstance(html, unicode): html = html.encode('ascii', 'xmlcharrefreplace') save_dir = os.path.join(request.registry.settings['transform_dir'], request.session['upload_dir']) # Save new html file from preview area save_and_backup_file(save_dir, 'index.html', html) conversionerror = '' # Get the title from aloha html. We have to do this using a separate # parse operation, because aloha_to_etree below does not give us a # tree on which path() works. A bug or this developer is just stumped. tree = etree.fromstring(html, etree.HTMLParser()) try: edited_title = tree.xpath('/html/head/title/text()')[0] request.session['title'] = edited_title except IndexError: if not request.session.get('title', None): request.session['title'] = 'Untitled Document' #transform preview html to cnxml cnxml = None try: tree = aloha_to_etree(html) #1 create structured HTML5 tree cnxml = etree_to_valid_cnxml(tree, pretty_print=True) except Exception as e: #return render_conversionerror(request, str(e)) conversionerror = str(e) if cnxml is not None: save_and_backup_file(save_dir, 'index.cnxml', cnxml) files = get_files_from_zipfile(os.path.join(save_dir, 'upload.zip')) save_zip(save_dir, cnxml, html, files) try: validate_cnxml(cnxml) except ConversionError as e: #return render_conversionerror(request, str(e)) conversionerror = str(e) response = Response(json.dumps({'saved': True, 'error': conversionerror})) response.content_type = 'application/json' return response
def preview_save(request): check_login(request) html = request.POST['html'] if isinstance(html, unicode): html = html.encode('ascii', 'xmlcharrefreplace') save_dir = os.path.join(request.registry.settings['transform_dir'], request.session['upload_dir']) # Save new html file from preview area save_and_backup_file(save_dir, 'index.html', html) conversionerror = '' #transform preview html to cnxml cnxml = None try: structured_html = aloha_to_html(html) #1 create structured HTML5 # parse the new title from structured HTML tree = etree.fromstring(structured_html, etree.HTMLParser()) try: edited_title = tree.xpath('/html/head/title/text()')[0] request.session['title'] = edited_title except: request.session['title'] = 'Untitled Document' cnxml = html_to_valid_cnxml(structured_html) #2 create cnxml from structured HTML5 except Exception as e: #return render_conversionerror(request, str(e)) conversionerror = str(e) if cnxml is not None: save_and_backup_file(save_dir, 'index.cnxml', cnxml) files = get_files_from_zipfile(os.path.join(save_dir, 'upload.zip')) save_zip(save_dir, cnxml, html, files) try: validate_cnxml(cnxml) except ConversionError as e: #return render_conversionerror(request, str(e)) conversionerror = str(e) response = Response(json.dumps({'saved': True, 'error': conversionerror})) response.content_type = 'application/json' return response
def _download_module(self, module_url): request = self.request session = request.session conn = sword2cnx.Connection(session['login'].service_document_url, user_name=session['login'].username, user_pass=session['login'].password, always_authenticate=True, download_service_document=False) parts = urlparse.urlsplit(module_url) path = parts.path.split('/') path = path[:path.index('sword')] module_url = '%s://%s%s' % (parts.scheme, parts.netloc, '/'.join(path)) # example: http://cnx.org/Members/user001/m17222/sword/editmedia zip_file = conn.get_cnx_module(module_url=module_url, packaging='zip') save_dir = get_save_dir(request) if save_dir is None: request.session['upload_dir'], save_dir = create_save_dir(request) extract_to_save_dir(zip_file, save_dir) cnxml_file = open(os.path.join(save_dir, 'index.cnxml'), 'rb') cnxml = cnxml_file.read() cnxml_file.close() conversionerror = None try: structuredhtml = cnxml_to_structuredhtml(cnxml) save_and_backup_file(save_dir, 'index.structured.html', structuredhtml) htmlpreview = structuredhtml_to_htmlpreview(structuredhtml) save_and_backup_file(save_dir, 'index.html', htmlpreview) files = get_files(save_dir) save_zip(save_dir, cnxml, structuredhtml, files) except libxml2.parserError: conversionerror = traceback.format_exc() raise ConversionError(conversionerror)
def preview_save(request): check_login(request) html = request.POST['html'] if isinstance(html, unicode): html = html.encode('ascii', 'xmlcharrefreplace') save_dir = os.path.join(request.registry.settings['transform_dir'], request.session['upload_dir']) # Save new html file from preview area save_and_backup_file(save_dir, 'index.html', html) conversionerror = '' # Get the title from aloha html. We have to do this using a separate # parse operation, because aloha_to_etree below does not give us a # tree on which path() works. A bug or this developer is just stumped. tree = etree.fromstring(html, etree.HTMLParser()) try: edited_title = tree.xpath('/html/head/title/text()')[0] request.session['title'] = edited_title except IndexError: if not request.session.get('title', None): request.session['title'] = 'Untitled Document' #transform preview html to cnxml cnxml = None try: tree = aloha_to_etree(html) #1 create structured HTML5 tree canonical_html = etree.tostring(tree, pretty_print=True) cnxml = etree_to_valid_cnxml(tree, pretty_print=True) except Exception as e: #return render_conversionerror(request, str(e)) conversionerror = str(e) if cnxml is not None: save_and_backup_file(save_dir, 'index.cnxml', cnxml) save_and_backup_file(save_dir, 'index.structured.html', canonical_html) files = get_files_from_zipfile(os.path.join(save_dir, 'upload.zip')) save_zip(save_dir, cnxml, canonical_html, files) try: validate_cnxml(cnxml) except ConversionError as e: #return render_conversionerror(request, str(e)) conversionerror = str(e) response = Response(json.dumps({'saved': True, 'error': conversionerror})) response.content_type = 'application/json' return response