Merge branch 'master' of https://scodoc.org/git/viennet/ScoDoc into refactor_nt

This commit is contained in:
Emmanuel Viennet 2022-01-13 23:40:30 +01:00
commit 0b87714ac0
7 changed files with 47 additions and 15 deletions

View File

@ -58,6 +58,7 @@ from app.scodoc import sco_utils as scu
from app.scodoc import sco_excel from app.scodoc import sco_excel
from app.scodoc import sco_pdf from app.scodoc import sco_pdf
from app.scodoc import sco_xml from app.scodoc import sco_xml
from app.scodoc.sco_exceptions import ScoPDFFormatError
from app.scodoc.sco_pdf import SU from app.scodoc.sco_pdf import SU
from app import log from app import log
@ -539,17 +540,18 @@ class GenTable(object):
# #
# titles = ["<para><b>%s</b></para>" % x for x in self.get_titles_list()] # titles = ["<para><b>%s</b></para>" % x for x in self.get_titles_list()]
pdf_style_list = [] pdf_style_list = []
Pt = [ data_list = self.get_data_list(
[Paragraph(SU(str(x)), CellStyle) for x in line] pdf_mode=True,
for line in ( pdf_style_list=pdf_style_list,
self.get_data_list( with_titles=True,
pdf_mode=True, omit_hidden_lines=True,
pdf_style_list=pdf_style_list, )
with_titles=True, try:
omit_hidden_lines=True, Pt = [
) [Paragraph(SU(str(x)), CellStyle) for x in line] for line in data_list
) ]
] except ValueError as exc:
raise ScoPDFFormatError(str(exc)) from exc
pdf_style_list += self.pdf_table_style pdf_style_list += self.pdf_table_style
T = Table(Pt, repeatRows=1, colWidths=self.pdf_col_widths, style=pdf_style_list) T = Table(Pt, repeatRows=1, colWidths=self.pdf_col_widths, style=pdf_style_list)

View File

@ -60,6 +60,21 @@ class ScoFormatError(ScoValueError):
pass pass
class ScoPDFFormatError(ScoValueError):
"erreur génération PDF (templates platypus, ...)"
def __init__(self, msg, dest_url=None):
super().__init__(
f"""Erreur dans un format pdf:
<p>{msg}</p>
<p>Vérifiez les paramètres (polices de caractères, balisage)
dans les paramètres ou préférences.
</p>
""",
dest_url=dest_url,
)
class ScoInvalidDept(ScoValueError): class ScoInvalidDept(ScoValueError):
"""departement invalide""" """departement invalide"""

View File

@ -815,7 +815,7 @@ def tab_absences_html(groups_infos, etat=None):
% (groups_infos.base_url, groups_infos.groups_titles), % (groups_infos.base_url, groups_infos.groups_titles),
"""<li><a class="stdlink" href="trombino?%s&format=pdf">Trombinoscope en PDF</a></li>""" """<li><a class="stdlink" href="trombino?%s&format=pdf">Trombinoscope en PDF</a></li>"""
% groups_infos.groups_query_args, % groups_infos.groups_query_args,
"""<li><a class="stdlink" href="pdf_trombino_tours?%s&format=pdf">Trombinoscope en PDF (format "IUT de Tours", beta)</a></li>""" """<li><a class="stdlink" href="pdf_trombino_tours?%s&format=pdf">Trombinoscope en PDF (format "IUT de Tours")</a></li>"""
% groups_infos.groups_query_args, % groups_infos.groups_query_args,
"""<li><a class="stdlink" href="pdf_feuille_releve_absences?%s&format=pdf">Feuille relevé absences hebdomadaire (beta)</a></li>""" """<li><a class="stdlink" href="pdf_feuille_releve_absences?%s&format=pdf">Feuille relevé absences hebdomadaire (beta)</a></li>"""
% groups_infos.groups_query_args, % groups_infos.groups_query_args,

View File

@ -762,7 +762,7 @@ class BasePreferences(object):
{ {
"initvalue": "Helvetica", "initvalue": "Helvetica",
"title": "Police de caractère principale", "title": "Police de caractère principale",
"explanation": "pour les pdf", "explanation": "pour les pdf (Helvetica est recommandée)",
"size": 25, "size": 25,
"category": "pdf", "category": "pdf",
}, },

View File

@ -44,6 +44,7 @@ from app.scodoc import sco_groups_view
from app.scodoc import sco_preferences from app.scodoc import sco_preferences
from app.scodoc import sco_trombino from app.scodoc import sco_trombino
from app.scodoc import sco_etud from app.scodoc import sco_etud
from app.scodoc.sco_exceptions import ScoPDFFormatError
from app.scodoc.sco_pdf import * from app.scodoc.sco_pdf import *
@ -268,7 +269,10 @@ def pdf_trombino_tours(
preferences=sco_preferences.SemPreferences(), preferences=sco_preferences.SemPreferences(),
) )
) )
document.build(objects) try:
document.build(objects)
except (ValueError, KeyError) as exc:
raise ScoPDFFormatError(str(exc)) from exc
data = report.getvalue() data = report.getvalue()
return scu.sendPDFFile(data, filename) return scu.sendPDFFile(data, filename)

View File

@ -151,6 +151,8 @@ def user_info(user_name, format="json"):
@scodoc7func @scodoc7func
def create_user_form(user_name=None, edit=0, all_roles=1): def create_user_form(user_name=None, edit=0, all_roles=1):
"form. création ou edition utilisateur" "form. création ou edition utilisateur"
if user_name is not None: # scodoc7func converti en int !
user_name = str(user_name)
auth_dept = current_user.dept auth_dept = current_user.dept
from_mail = current_user.email from_mail = current_user.email
initvalues = {} initvalues = {}
@ -745,6 +747,8 @@ def user_info_page(user_name=None):
""" """
from app.scodoc.sco_permissions_check import can_handle_passwd from app.scodoc.sco_permissions_check import can_handle_passwd
if user_name is not None: # scodoc7func converti en int !
user_name = str(user_name)
# peut on divulguer ces infos ? # peut on divulguer ces infos ?
if not can_handle_passwd(current_user, allow_admindepts=True): if not can_handle_passwd(current_user, allow_admindepts=True):
raise AccessDenied("Vous n'avez pas la permission de voir cette page") raise AccessDenied("Vous n'avez pas la permission de voir cette page")
@ -753,7 +757,7 @@ def user_info_page(user_name=None):
if not user_name: if not user_name:
user = current_user user = current_user
else: else:
user = User.query.filter_by(user_name=str(user_name)).first() user = User.query.filter_by(user_name=user_name).first()
if not user: if not user:
raise ScoValueError("invalid user_name") raise ScoValueError("invalid user_name")
@ -802,6 +806,8 @@ def form_change_password(user_name=None):
"""Formulaire de changement mot de passe de l'utilisateur user_name. """Formulaire de changement mot de passe de l'utilisateur user_name.
Un utilisateur peut toujours changer son propre mot de passe. Un utilisateur peut toujours changer son propre mot de passe.
""" """
if user_name is not None: # scodoc7func converti en int !
user_name = str(user_name)
if not user_name: if not user_name:
user = current_user user = current_user
else: else:
@ -850,6 +856,8 @@ def form_change_password(user_name=None):
@scodoc7func @scodoc7func
def change_password(user_name, password, password2): def change_password(user_name, password, password2):
"Change the password for user given by user_name" "Change the password for user given by user_name"
if user_name is not None: # scodoc7func converti en int !
user_name = str(user_name)
u = User.query.filter_by(user_name=user_name).first() u = User.query.filter_by(user_name=user_name).first()
# Check access permission # Check access permission
if not can_handle_passwd(u): if not can_handle_passwd(u):
@ -909,6 +917,8 @@ def change_password(user_name, password, password2):
@permission_required(Permission.ScoUsersAdmin) @permission_required(Permission.ScoUsersAdmin)
def toggle_active_user(user_name: str = None): def toggle_active_user(user_name: str = None):
"""Change active status of a user account""" """Change active status of a user account"""
if user_name is not None: # scodoc7func converti en int !
user_name = str(user_name)
u = User.query.filter_by(user_name=user_name).first() u = User.query.filter_by(user_name=user_name).first()
if not u: if not u:
raise ScoValueError("invalid user_name") raise ScoValueError("invalid user_name")

View File

@ -389,6 +389,7 @@ def convert_object(
new_ref = None new_ref = None
elif is_table and table_name in { elif is_table and table_name in {
"notes_semset_formsemestre", "notes_semset_formsemestre",
"entreprise_contact",
}: }:
# pour anciennes installs où des relations n'avait pas été déclarées clés étrangères # pour anciennes installs où des relations n'avait pas été déclarées clés étrangères
# eg: notes_semset_formsemestre.semset_id n'était pas une clé # eg: notes_semset_formsemestre.semset_id n'était pas une clé