Merge pull request #1942 from jvanbraekel/master

Use request_reset_password +  PDF and TSV exports
This commit is contained in:
mdipierro authored and GitHub committed 2018-08-05 17:13:45 -07:00
commit 6438200923
5 files changed
+38 -42

No files matched your search

+2 -2
View File
@@ -10,8 +10,8 @@
<a href="{{=URL('user/register')}}">{{=T('Register')}}</a> <a href="{{=URL('user/register')}}">{{=T('Register')}}</a>
<br/> <br/>
{{pass}} {{pass}}
{{if request.args(0)=='login' and not 'request_reset_password' in auth.settings.actions_disabled:}} {{if request.args(0)=='login' and not 'retrieve_password' in auth.settings.actions_disabled:}}
<a href="{{=URL('user/request_reset_password')}}">{{=T('Lost your password?')}}</a> <a href="{{=URL('user/retrieve_password')}}">{{=T('Lost your password?')}}</a>
{{pass}} {{pass}}
{{if request.args(0)=='register':}} {{if request.args(0)=='register':}}
<a href="{{=URL('user/login')}}">{{=T('Login')}}</a> <a href="{{=URL('user/login')}}">{{=T('Login')}}</a>
+1 -1
View File
@@ -5,7 +5,7 @@ filename = '%s/%s.html' % (request.controller,request.function)
if os.path.exists(os.path.join(request.folder,'views',filename)): if os.path.exists(os.path.join(request.folder,'views',filename)):
html=response.render(filename) html=response.render(filename)
else: else:
html=BODY(BEAUTIFY(response._vars)).xml() html=BODY(BEAUTIFY(response._vars))
pass pass
=pdf_from_html(html) =pdf_from_html(html)
}} }}
+2 -2
View File
@@ -25,7 +25,7 @@ def wrapper(f):
def latex_from_html(html): def latex_from_html(html):
markmin = TAG(html).element('body').flatten(markmin_serializer) markmin = TAG(html).element('body').flatten(markmin_serializer)
return XML(markmin2latex(markmin)) return markmin2latex(markmin)
def pdflatex_from_html(html): def pdflatex_from_html(html):
@@ -39,7 +39,7 @@ def pdflatex_from_html(html):
H1('warnings'), H1('warnings'),
UL(*warnings))).xml()) UL(*warnings))).xml())
else: else:
return XML(out) return out
def pyfpdf_from_html(html): def pyfpdf_from_html(html):
+7 -8
View File
@@ -10,7 +10,7 @@ import os.path
import re import re
import sys import sys
from tempfile import mkstemp, mkdtemp, NamedTemporaryFile from tempfile import mkstemp, mkdtemp, NamedTemporaryFile
from markmin2latex import markmin2latex from gluon.contrib.markmin.markmin2latex import markmin2latex
__all__ = ['markmin2pdf'] __all__ = ['markmin2pdf']
@@ -58,7 +58,7 @@ def latex2pdf(latex, pdflatex='pdflatex', passes=3):
# setup the envoriment # setup the envoriment
tmpdir = mkdtemp() tmpdir = mkdtemp()
texfile = open(tmpdir + '/test.tex', 'wb') texfile = open(tmpdir + '/test.tex', 'wt',encoding="utf-8")
texfile.write(latex) texfile.write(latex)
texfile.seek(0) texfile.seek(0)
texfile.close() texfile.close()
@@ -90,15 +90,14 @@ def latex2pdf(latex, pdflatex='pdflatex', passes=3):
os.unlink(logname) os.unlink(logname)
pdffile = texfile.rsplit('.', 1)[0] + '.pdf' pdffile = texfile.rsplit('.', 1)[0] + '.pdf'
data = None
if os.path.isfile(pdffile): if os.path.isfile(pdffile):
fpdf = open(pdffile, 'rb') with open(pdffile,'rb') as fpdf :
try:
data = fpdf.read() data = fpdf.read()
finally:
fpdf.close()
else:
data = None
removeall(tmpdir) removeall(tmpdir)
return data, warnings, errors return data, warnings, errors
+26 -29
View File
@@ -19,7 +19,7 @@ import re
import copy import copy
import os 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.http import HTTP, redirect
from gluon.html import XmlComponent, truncate_string from gluon.html import XmlComponent, truncate_string
from gluon.html import XML, SPAN, TAG, A, DIV, CAT, UL, LI, TEXTAREA, BR, IMG 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, [ reduce(lambda a,b: a|b, [
field.contains(k) for field in sfields] field.contains(k) for field in sfields]
) for k in key.split()]) ) for k in key.split()])
# from https://groups.google.com/forum/#!topic/web2py/hKe6lI25Bv4 # from https://groups.google.com/forum/#!topic/web2py/hKe6lI25Bv4
# needs testing... # needs testing...
#words = key.split(' ') if key else [] #words = key.split(' ') if key else []
@@ -2630,8 +2630,7 @@ class SQLFORM(FORM):
xml=(ExporterXML, 'XML', T('XML export of columns shown')), xml=(ExporterXML, 'XML', T('XML export of columns shown')),
html=(ExporterHTML, 'HTML', T('HTML export of visible columns')), html=(ExporterHTML, 'HTML', T('HTML export of visible columns')),
json=(ExporterJSON, 'JSON', T('JSON export of visible columns')), json=(ExporterJSON, 'JSON', T('JSON export of visible columns')),
tsv_with_hidden_cols= tsv_with_hidden_cols=(ExporterTSV_hidden, 'TSV (Spreadsheets, hidden cols)', T('Spreadsheet-optimised export of tab-separated content including hidden columns. May be slow')),
(ExporterTSV, '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.'))) tsv=(ExporterTSV, 'TSV (Spreadsheets)', T('Spreadsheet-optimised export of tab-separated content, visible columns only. May be slow.')))
if exportclasses is not None: if exportclasses is not None:
""" """
@@ -3697,40 +3696,38 @@ class ExportClass(object):
class ExporterTSV(ExportClass): class ExporterTSV(ExportClass):
# TSV, represent == True
label = 'TSV' label = 'TSV'
file_ext = "csv" file_ext = "tsv"
content_type = "text/tab-separated-values" content_type = "text/tab-separated-values"
def __init__(self, rows): def __init__(self, rows):
ExportClass.__init__(self, rows) ExportClass.__init__(self, rows)
def export(self): def export(self): # export TSV with rows.represent
out = StringIO()
final = StringIO()
import csv
writer = csv.writer(out, delimiter='\t')
if self.rows: if self.rows:
import codecs s = StringIO()
final.write(codecs.BOM_UTF16) self.rows.export_to_csv_file(s, represent=True,delimiter='\t',newline='\n')
writer.writerow( return s.getvalue()
[to_unicode(col, "utf8") for col in self.rows.colnames]) else:
data = out.getvalue().decode("utf8") return None
data = data.encode("utf-16")
data = data[2:]
final.write(data)
out.truncate(0)
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) class ExporterTSV_hidden(ExportClass):
return str(final.getvalue()) 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): class ExporterCSV(ExportClass):