From b7ba4a15f1a25f45732dad84cc26bc0fb91badb8 Mon Sep 17 00:00:00 2001 From: jvanbraekel Date: Thu, 7 Jun 2018 16:14:52 +0200 Subject: [PATCH 1/4] Update request_reset_password in user.htlm Update /user/request_reset_password to user/retrieve_password and linked settings option. According to https://web2py.readthedocs.io/en/latest/_modules/gluon/tools.html#Auth 'request_reset_password' should not even be exposed anymore. (but this is still the case). --- applications/welcome/views/default/user.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/welcome/views/default/user.html b/applications/welcome/views/default/user.html index d3a4ca6a..e6635ae9 100644 --- a/applications/welcome/views/default/user.html +++ b/applications/welcome/views/default/user.html @@ -10,8 +10,8 @@ {{=T('Register')}}
{{pass}} - {{if request.args(0)=='login' and not 'request_reset_password' in auth.settings.actions_disabled:}} - {{=T('Lost your password?')}} + {{if request.args(0)=='login' and not 'retrieve_password' in auth.settings.actions_disabled:}} + {{=T('Lost your password?')}} {{pass}} {{if request.args(0)=='register':}} {{=T('Login')}} From e73029ce3781e33387ac6fe9696971b25d98176e Mon Sep 17 00:00:00 2001 From: jvanbraekel <29703119+jvanbraekel@users.noreply.github.com> Date: Tue, 31 Jul 2018 10:13:21 +0200 Subject: [PATCH 2/4] fix markmin2latex import Add full path name in markmin2latex import --- gluon/contrib/markmin/markmin2pdf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gluon/contrib/markmin/markmin2pdf.py b/gluon/contrib/markmin/markmin2pdf.py index 89728a9f..a56855cc 100644 --- a/gluon/contrib/markmin/markmin2pdf.py +++ b/gluon/contrib/markmin/markmin2pdf.py @@ -10,7 +10,7 @@ import os.path import re import sys from tempfile import mkstemp, mkdtemp, NamedTemporaryFile -from markmin2latex import markmin2latex +from gluon.contrib.markmin.markmin2latex import markmin2latex __all__ = ['markmin2pdf'] From 0d8dc294e90ae6b34692d1760550a574e62ea734 Mon Sep 17 00:00:00 2001 From: jvanbraekel Date: Thu, 2 Aug 2018 10:59:51 +0200 Subject: [PATCH 3/4] Fix tsv ext, add tsv hidden exporter , use csv exporter for tsv export --- gluon/sqlhtml.py | 55 +++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py index b005b35e..cfdf88ce 100644 --- a/gluon/sqlhtml.py +++ b/gluon/sqlhtml.py @@ -19,7 +19,7 @@ import re import copy import os -from gluon._compat import StringIO, unichr, urllib_quote, iteritems, basestring, long, integer_types, unicodeT, to_native, to_unicode, urlencode +from gluon._compat import StringIO,unichr, urllib_quote, iteritems, basestring, long, integer_types, unicodeT, to_native, to_unicode, urlencode from gluon.http import HTTP, redirect from gluon.html import XmlComponent, truncate_string from gluon.html import XML, SPAN, TAG, A, DIV, CAT, UL, LI, TEXTAREA, BR, IMG @@ -2055,7 +2055,7 @@ class SQLFORM(FORM): reduce(lambda a,b: a|b, [ field.contains(k) for field in sfields] ) for k in key.split()]) - + # from https://groups.google.com/forum/#!topic/web2py/hKe6lI25Bv4 # needs testing... #words = key.split(' ') if key else [] @@ -2630,8 +2630,7 @@ class SQLFORM(FORM): xml=(ExporterXML, 'XML', T('XML export of columns shown')), html=(ExporterHTML, 'HTML', T('HTML export of visible columns')), json=(ExporterJSON, 'JSON', T('JSON export of visible columns')), - tsv_with_hidden_cols= - (ExporterTSV, 'TSV (Spreadsheets, hidden cols)', T('Spreadsheet-optimised export of tab-separated content including hidden columns. May be slow')), + tsv_with_hidden_cols=(ExporterTSV_hidden, 'TSV (Spreadsheets, hidden cols)', T('Spreadsheet-optimised export of tab-separated content including hidden columns. May be slow')), tsv=(ExporterTSV, 'TSV (Spreadsheets)', T('Spreadsheet-optimised export of tab-separated content, visible columns only. May be slow.'))) if exportclasses is not None: """ @@ -3697,40 +3696,38 @@ class ExportClass(object): class ExporterTSV(ExportClass): + # TSV, represent == True label = 'TSV' - file_ext = "csv" + file_ext = "tsv" content_type = "text/tab-separated-values" def __init__(self, rows): ExportClass.__init__(self, rows) - def export(self): - out = StringIO() - final = StringIO() - import csv - writer = csv.writer(out, delimiter='\t') + def export(self): # export TSV with rows.represent if self.rows: - import codecs - final.write(codecs.BOM_UTF16) - writer.writerow( - [to_unicode(col, "utf8") for col in self.rows.colnames]) - data = out.getvalue().decode("utf8") - data = data.encode("utf-16") - data = data[2:] - final.write(data) - out.truncate(0) + s = StringIO() + self.rows.export_to_csv_file(s, represent=True,delimiter='\t',newline='\n') + return s.getvalue() + else: + return None - records = self.represented() - for row in records: - writer.writerow( - [str(col).decode('utf8').encode("utf-8") for col in row]) - data = out.getvalue().decode("utf8") - data = data.encode("utf-16") - data = data[2:] - final.write(data) - out.truncate(0) - return str(final.getvalue()) +class ExporterTSV_hidden(ExportClass): + label = 'TSV' + file_ext = "tsv" + content_type = "text/tab-separated-values" + + def __init__(self, rows): + ExportClass.__init__(self, rows) + + def export(self): # export TSV with rows.represent + if self.rows: + s = StringIO() + self.rows.export_to_csv_file(s,delimiter='\t',newline='\n') + return s.getvalue() + else: + return None class ExporterCSV(ExportClass): From 68284be7b06297b7a1cdc41c1823371d4a1a81f6 Mon Sep 17 00:00:00 2001 From: jvanbraekel Date: Thu, 2 Aug 2018 11:04:14 +0200 Subject: [PATCH 4/4] Fix pdf export , make it python3 compatible, Fix markmin2latex import --- applications/welcome/views/generic.pdf | 2 +- gluon/contrib/generics.py | 4 ++-- gluon/contrib/markmin/markmin2pdf.py | 13 ++++++------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/applications/welcome/views/generic.pdf b/applications/welcome/views/generic.pdf index 722831a1..bc257a38 100644 --- a/applications/welcome/views/generic.pdf +++ b/applications/welcome/views/generic.pdf @@ -5,7 +5,7 @@ filename = '%s/%s.html' % (request.controller,request.function) if os.path.exists(os.path.join(request.folder,'views',filename)): html=response.render(filename) else: - html=BODY(BEAUTIFY(response._vars)).xml() + html=BODY(BEAUTIFY(response._vars)) pass =pdf_from_html(html) }} diff --git a/gluon/contrib/generics.py b/gluon/contrib/generics.py index f0e502ef..3beb6e58 100644 --- a/gluon/contrib/generics.py +++ b/gluon/contrib/generics.py @@ -25,7 +25,7 @@ def wrapper(f): def latex_from_html(html): markmin = TAG(html).element('body').flatten(markmin_serializer) - return XML(markmin2latex(markmin)) + return markmin2latex(markmin) def pdflatex_from_html(html): @@ -39,7 +39,7 @@ def pdflatex_from_html(html): H1('warnings'), UL(*warnings))).xml()) else: - return XML(out) + return out def pyfpdf_from_html(html): diff --git a/gluon/contrib/markmin/markmin2pdf.py b/gluon/contrib/markmin/markmin2pdf.py index a56855cc..7e3c2eec 100644 --- a/gluon/contrib/markmin/markmin2pdf.py +++ b/gluon/contrib/markmin/markmin2pdf.py @@ -58,7 +58,7 @@ def latex2pdf(latex, pdflatex='pdflatex', passes=3): # setup the envoriment tmpdir = mkdtemp() - texfile = open(tmpdir + '/test.tex', 'wb') + texfile = open(tmpdir + '/test.tex', 'wt',encoding="utf-8") texfile.write(latex) texfile.seek(0) texfile.close() @@ -90,15 +90,14 @@ def latex2pdf(latex, pdflatex='pdflatex', passes=3): os.unlink(logname) pdffile = texfile.rsplit('.', 1)[0] + '.pdf' + data = None + if os.path.isfile(pdffile): - fpdf = open(pdffile, 'rb') - try: + with open(pdffile,'rb') as fpdf : data = fpdf.read() - finally: - fpdf.close() - else: - data = None + removeall(tmpdir) + return data, warnings, errors