forked from ScoDoc/ScoDoc
Python 3: n'utilise plus six. Utilise systématiquement with avec open.
This commit is contained in:
parent
3c5b721a3a
commit
c1d13d6089
@ -44,7 +44,6 @@ import unicodedata
|
|||||||
|
|
||||||
import app.scodoc.sco_utils as scu
|
import app.scodoc.sco_utils as scu
|
||||||
from app import log
|
from app import log
|
||||||
import six
|
|
||||||
|
|
||||||
PE_DEBUG = 0
|
PE_DEBUG = 0
|
||||||
|
|
||||||
@ -145,7 +144,7 @@ def escape_for_latex(s):
|
|||||||
}
|
}
|
||||||
exp = re.compile(
|
exp = re.compile(
|
||||||
"|".join(
|
"|".join(
|
||||||
re.escape(six.text_type(key))
|
re.escape(key)
|
||||||
for key in sorted(list(conv.keys()), key=lambda item: -len(item))
|
for key in sorted(list(conv.keys()), key=lambda item: -len(item))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -752,6 +752,8 @@ if __name__ == "__main__":
|
|||||||
)
|
)
|
||||||
document.build(objects)
|
document.build(objects)
|
||||||
data = doc.getvalue()
|
data = doc.getvalue()
|
||||||
open("/tmp/gen_table.pdf", "wb").write(data)
|
with open("/tmp/gen_table.pdf", "wb") as f:
|
||||||
|
f.write(data)
|
||||||
p = T.make_page(format="pdf")
|
p = T.make_page(format="pdf")
|
||||||
open("toto.pdf", "wb").write(p)
|
with open("toto.pdf", "wb") as f:
|
||||||
|
f.write(p)
|
||||||
|
@ -4,11 +4,8 @@
|
|||||||
|
|
||||||
# Code from http://code.activestate.com/recipes/457411/
|
# Code from http://code.activestate.com/recipes/457411/
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
from bisect import bisect_left, bisect_right
|
from bisect import bisect_left, bisect_right
|
||||||
|
|
||||||
from six.moves import zip
|
|
||||||
|
|
||||||
|
|
||||||
class intervalmap(object):
|
class intervalmap(object):
|
||||||
"""
|
"""
|
||||||
|
@ -27,10 +27,7 @@
|
|||||||
|
|
||||||
"""Calculs sur les notes et cache des resultats
|
"""Calculs sur les notes et cache des resultats
|
||||||
"""
|
"""
|
||||||
import inspect
|
|
||||||
import os
|
|
||||||
import pdb
|
|
||||||
import time
|
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
|
|
||||||
from flask import g, url_for
|
from flask import g, url_for
|
||||||
@ -40,12 +37,8 @@ import app.scodoc.sco_utils as scu
|
|||||||
import app.scodoc.notesdb as ndb
|
import app.scodoc.notesdb as ndb
|
||||||
from app import log
|
from app import log
|
||||||
from app.scodoc.sco_formulas import NoteVector
|
from app.scodoc.sco_formulas import NoteVector
|
||||||
from app.scodoc.sco_exceptions import (
|
from app.scodoc.sco_exceptions import ScoValueError
|
||||||
AccessDenied,
|
|
||||||
NoteProcessError,
|
|
||||||
ScoException,
|
|
||||||
ScoValueError,
|
|
||||||
)
|
|
||||||
from app.scodoc.sco_formsemestre import (
|
from app.scodoc.sco_formsemestre import (
|
||||||
formsemestre_uecoef_list,
|
formsemestre_uecoef_list,
|
||||||
formsemestre_uecoef_create,
|
formsemestre_uecoef_create,
|
||||||
|
@ -203,7 +203,9 @@ class BaseArchiver(object):
|
|||||||
def get_archive_description(self, archive_id):
|
def get_archive_description(self, archive_id):
|
||||||
"""Return description of archive"""
|
"""Return description of archive"""
|
||||||
self.initialize()
|
self.initialize()
|
||||||
return open(os.path.join(archive_id, "_description.txt")).read()
|
with open(os.path.join(archive_id, "_description.txt")) as f:
|
||||||
|
descr = f.read()
|
||||||
|
return descr
|
||||||
|
|
||||||
def create_obj_archive(self, oid: int, description: str):
|
def create_obj_archive(self, oid: int, description: str):
|
||||||
"""Creates a new archive for this object and returns its id."""
|
"""Creates a new archive for this object and returns its id."""
|
||||||
@ -232,9 +234,8 @@ class BaseArchiver(object):
|
|||||||
try:
|
try:
|
||||||
scu.GSL.acquire()
|
scu.GSL.acquire()
|
||||||
fname = os.path.join(archive_id, filename)
|
fname = os.path.join(archive_id, filename)
|
||||||
f = open(fname, "wb")
|
with open(fname, "wb") as f:
|
||||||
f.write(data)
|
f.write(data)
|
||||||
f.close()
|
|
||||||
finally:
|
finally:
|
||||||
scu.GSL.release()
|
scu.GSL.release()
|
||||||
return filename
|
return filename
|
||||||
@ -247,7 +248,9 @@ class BaseArchiver(object):
|
|||||||
raise ValueError("invalid filename")
|
raise ValueError("invalid filename")
|
||||||
fname = os.path.join(archive_id, filename)
|
fname = os.path.join(archive_id, filename)
|
||||||
log("reading archive file %s" % fname)
|
log("reading archive file %s" % fname)
|
||||||
return open(fname, "rb").read()
|
with open(fname, "rb") as f:
|
||||||
|
data = f.read()
|
||||||
|
return data
|
||||||
|
|
||||||
def get_archived_file(self, oid, archive_name, filename):
|
def get_archived_file(self, oid, archive_name, filename):
|
||||||
"""Recupere donnees du fichier indiqué et envoie au client"""
|
"""Recupere donnees du fichier indiqué et envoie au client"""
|
||||||
|
@ -28,7 +28,6 @@
|
|||||||
"""Semestres: Codes gestion parcours (constantes)
|
"""Semestres: Codes gestion parcours (constantes)
|
||||||
"""
|
"""
|
||||||
import collections
|
import collections
|
||||||
from six.moves import range
|
|
||||||
|
|
||||||
NOTES_TOLERANCE = 0.00499999999999 # si note >= (BARRE-TOLERANCE), considere ok
|
NOTES_TOLERANCE = 0.00499999999999 # si note >= (BARRE-TOLERANCE), considere ok
|
||||||
# (permet d'eviter d'afficher 10.00 sous barre alors que la moyenne vaut 9.999)
|
# (permet d'eviter d'afficher 10.00 sous barre alors que la moyenne vaut 9.999)
|
||||||
|
@ -167,7 +167,8 @@ def _anonymize_db(ano_db_name):
|
|||||||
|
|
||||||
def _get_scodoc_serial():
|
def _get_scodoc_serial():
|
||||||
try:
|
try:
|
||||||
return int(open(os.path.join(scu.SCODOC_VERSION_DIR, "scodoc.sn")).read())
|
with open(os.path.join(scu.SCODOC_VERSION_DIR, "scodoc.sn")) as f:
|
||||||
|
return int(f.read())
|
||||||
except:
|
except:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
@ -33,10 +33,10 @@ XXX incompatible avec les ics HyperPlanning Paris 13 (était pour GPU).
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import six.moves.urllib.request, six.moves.urllib.error, six.moves.urllib.parse
|
|
||||||
import traceback
|
|
||||||
import icalendar
|
import icalendar
|
||||||
import pprint
|
import pprint
|
||||||
|
import traceback
|
||||||
|
import urllib
|
||||||
|
|
||||||
import app.scodoc.sco_utils as scu
|
import app.scodoc.sco_utils as scu
|
||||||
from app import log
|
from app import log
|
||||||
@ -80,7 +80,7 @@ def formsemestre_load_ics(sem):
|
|||||||
ics_data = ""
|
ics_data = ""
|
||||||
else:
|
else:
|
||||||
log("Loading edt from %s" % ics_url)
|
log("Loading edt from %s" % ics_url)
|
||||||
f = six.moves.urllib.request.urlopen(
|
f = urllib.request.urlopen(
|
||||||
ics_url, timeout=5
|
ics_url, timeout=5
|
||||||
) # 5s TODO: add config parameter, eg for slow networks
|
) # 5s TODO: add config parameter, eg for slow networks
|
||||||
ics_data = f.read()
|
ics_data = f.read()
|
||||||
|
@ -830,7 +830,7 @@ appreciations_edit = _appreciationsEditor.edit
|
|||||||
def read_etablissements():
|
def read_etablissements():
|
||||||
filename = os.path.join(scu.SCO_TOOLS_DIR, scu.CONFIG.ETABL_FILENAME)
|
filename = os.path.join(scu.SCO_TOOLS_DIR, scu.CONFIG.ETABL_FILENAME)
|
||||||
log("reading %s" % filename)
|
log("reading %s" % filename)
|
||||||
f = open(filename)
|
with open(filename) as f:
|
||||||
L = [x[:-1].split(";") for x in f]
|
L = [x[:-1].split(";") for x in f]
|
||||||
E = {}
|
E = {}
|
||||||
for l in L[1:]:
|
for l in L[1:]:
|
||||||
|
@ -58,7 +58,6 @@ from app.scodoc import sco_permissions_check
|
|||||||
from app.scodoc import sco_portal_apogee
|
from app.scodoc import sco_portal_apogee
|
||||||
from app.scodoc import sco_preferences
|
from app.scodoc import sco_preferences
|
||||||
from app.scodoc import sco_users
|
from app.scodoc import sco_users
|
||||||
import six
|
|
||||||
|
|
||||||
|
|
||||||
def _default_sem_title(F):
|
def _default_sem_title(F):
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
"""Semestres: validation semestre et UE dans parcours
|
"""Semestres: validation semestre et UE dans parcours
|
||||||
"""
|
"""
|
||||||
import six.moves.urllib.request, six.moves.urllib.parse, six.moves.urllib.error, time, datetime
|
import time
|
||||||
|
|
||||||
import flask
|
import flask
|
||||||
from flask import url_for, g, request
|
from flask import url_for, g, request
|
||||||
@ -494,7 +494,7 @@ def formsemestre_recap_parcours_table(
|
|||||||
with_links=False,
|
with_links=False,
|
||||||
with_all_columns=True,
|
with_all_columns=True,
|
||||||
a_url="",
|
a_url="",
|
||||||
sem_info={},
|
sem_info=None,
|
||||||
show_details=False,
|
show_details=False,
|
||||||
):
|
):
|
||||||
"""Tableau HTML recap parcours
|
"""Tableau HTML recap parcours
|
||||||
@ -502,6 +502,7 @@ def formsemestre_recap_parcours_table(
|
|||||||
sem_info = { formsemestre_id : txt } permet d'ajouter des informations associées à chaque semestre
|
sem_info = { formsemestre_id : txt } permet d'ajouter des informations associées à chaque semestre
|
||||||
with_all_columns: si faux, pas de colonne "assiduité".
|
with_all_columns: si faux, pas de colonne "assiduité".
|
||||||
"""
|
"""
|
||||||
|
sem_info = sem_info or {}
|
||||||
H = []
|
H = []
|
||||||
linktmpl = '<span onclick="toggle_vis(this);" class="toggle_sem sem_%%s">%s</span>'
|
linktmpl = '<span onclick="toggle_vis(this);" class="toggle_sem sem_%%s">%s</span>'
|
||||||
minuslink = linktmpl % scu.icontag("minus_img", border="0", alt="-")
|
minuslink = linktmpl % scu.icontag("minus_img", border="0", alt="-")
|
||||||
|
@ -59,8 +59,6 @@ from app.scodoc.sco_exceptions import ScoException, AccessDenied, ScoValueError
|
|||||||
from app.scodoc.sco_permissions import Permission
|
from app.scodoc.sco_permissions import Permission
|
||||||
from app.scodoc.TrivialFormulator import TrivialFormulator
|
from app.scodoc.TrivialFormulator import TrivialFormulator
|
||||||
|
|
||||||
import six
|
|
||||||
|
|
||||||
|
|
||||||
def checkGroupName(
|
def checkGroupName(
|
||||||
groupName,
|
groupName,
|
||||||
@ -732,10 +730,6 @@ def setGroups(
|
|||||||
group_name = fs[0].strip()
|
group_name = fs[0].strip()
|
||||||
if not group_name:
|
if not group_name:
|
||||||
continue
|
continue
|
||||||
# ajax arguments are encoded in utf-8:
|
|
||||||
# group_name = six.text_type(group_name, "utf-8").encode(
|
|
||||||
# scu.SCO_ENCODING
|
|
||||||
# ) # #py3 #sco8
|
|
||||||
group_id = createGroup(partition_id, group_name)
|
group_id = createGroup(partition_id, group_name)
|
||||||
# Place dans ce groupe les etudiants indiqués:
|
# Place dans ce groupe les etudiants indiqués:
|
||||||
for etudid in fs[1:-1]:
|
for etudid in fs[1:-1]:
|
||||||
|
@ -350,7 +350,6 @@ def pdf_basic_page(
|
|||||||
|
|
||||||
|
|
||||||
# Gestion du lock pdf
|
# Gestion du lock pdf
|
||||||
import threading, time, six.moves.queue, six.moves._thread
|
|
||||||
|
|
||||||
|
|
||||||
class PDFLock(object):
|
class PDFLock(object):
|
||||||
|
@ -39,7 +39,6 @@ import app.scodoc.sco_utils as scu
|
|||||||
from app import log
|
from app import log
|
||||||
from app.scodoc.sco_exceptions import ScoValueError
|
from app.scodoc.sco_exceptions import ScoValueError
|
||||||
from app.scodoc import sco_preferences
|
from app.scodoc import sco_preferences
|
||||||
import six
|
|
||||||
|
|
||||||
SCO_CACHE_ETAPE_FILENAME = os.path.join(scu.SCO_TMP_DIR, "last_etapes.xml")
|
SCO_CACHE_ETAPE_FILENAME = os.path.join(scu.SCO_TMP_DIR, "last_etapes.xml")
|
||||||
|
|
||||||
@ -386,7 +385,8 @@ def get_etapes_apogee():
|
|||||||
# cache le resultat (utile si le portail repond de façon intermitente)
|
# cache le resultat (utile si le portail repond de façon intermitente)
|
||||||
if infos:
|
if infos:
|
||||||
log("get_etapes_apogee: caching result")
|
log("get_etapes_apogee: caching result")
|
||||||
open(SCO_CACHE_ETAPE_FILENAME, "w").write(doc)
|
with open(SCO_CACHE_ETAPE_FILENAME, "w") as f:
|
||||||
|
f.write(doc)
|
||||||
except:
|
except:
|
||||||
log("invalid XML response from getEtapes Web Service\n%s" % etapes_url)
|
log("invalid XML response from getEtapes Web Service\n%s" % etapes_url)
|
||||||
# Avons nous la copie d'une réponse récente ?
|
# Avons nous la copie d'une réponse récente ?
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
import tempfile
|
import tempfile
|
||||||
import six.moves.urllib.request, six.moves.urllib.parse, six.moves.urllib.error
|
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
@ -1399,7 +1398,8 @@ def graph_parcours(
|
|||||||
# Genere graphe
|
# Genere graphe
|
||||||
_, path = tempfile.mkstemp(".gr")
|
_, path = tempfile.mkstemp(".gr")
|
||||||
g.write(path=path, format=format)
|
g.write(path=path, format=format)
|
||||||
data = open(path, "rb").read()
|
with open(path, "rb") as f:
|
||||||
|
data = f.read()
|
||||||
log("dot generated %d bytes in %s format" % (len(data), format))
|
log("dot generated %d bytes in %s format" % (len(data), format))
|
||||||
if not data:
|
if not data:
|
||||||
log("graph.to_string=%s" % g.to_string())
|
log("graph.to_string=%s" % g.to_string())
|
||||||
|
@ -35,6 +35,7 @@ Note: Code très ancien, porté de Zope/DTML, peu utilisable
|
|||||||
|
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
import urllib
|
||||||
|
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
@ -166,14 +167,14 @@ def index_html(etud_nom=None, limit=50, offset="", format="html"):
|
|||||||
if offset:
|
if offset:
|
||||||
webparams["offset"] = max((offset or 0) - limit, 0)
|
webparams["offset"] = max((offset or 0) - limit, 0)
|
||||||
prev_lnk = '<a class="stdlink" href="%s">précédentes</a>' % (
|
prev_lnk = '<a class="stdlink" href="%s">précédentes</a>' % (
|
||||||
request.base_url + "?" + six.moves.urllib.parse.urlencode(webparams)
|
request.base_url + "?" + urllib.parse.urlencode(webparams)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
prev_lnk = ""
|
prev_lnk = ""
|
||||||
if len(entreprises) >= limit:
|
if len(entreprises) >= limit:
|
||||||
webparams["offset"] = (offset or 0) + limit
|
webparams["offset"] = (offset or 0) + limit
|
||||||
next_lnk = '<a class="stdlink" href="%s">suivantes</a>' % (
|
next_lnk = '<a class="stdlink" href="%s">suivantes</a>' % (
|
||||||
request.base_url + "?" + six.moves.urllib.parse.urlencode(webparams)
|
request.base_url + "?" + urllib.parse.urlencode(webparams)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
next_lnk = ""
|
next_lnk = ""
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""Change un identifiant d'enseignant (pour corriger une erreur, typiquement un doublon)
|
|
||||||
|
|
||||||
(à lancer en tant qu'utilisateur postgres)
|
|
||||||
Emmanuel Viennet, 2007 - 2014
|
|
||||||
"""
|
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
import pdb, os, sys
|
|
||||||
import psycopg2
|
|
||||||
from six.moves import input
|
|
||||||
|
|
||||||
if len(sys.argv) != 4:
|
|
||||||
print("Usage: %s database ancien_utilisateur nouvel_utilisateur" % sys.argv[0])
|
|
||||||
print("Exemple: change_enseignant.py SCOGEII toto tata")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
dbname = sys.argv[1]
|
|
||||||
OLD_ID = sys.argv[2]
|
|
||||||
NEW_ID = sys.argv[3]
|
|
||||||
|
|
||||||
DBCNXSTRING = "dbname=%s" % dbname
|
|
||||||
|
|
||||||
# Confirmation
|
|
||||||
ans = input(
|
|
||||||
"Remplacer le l'utilisateur %s par %s dans toute la base du departement %s ?"
|
|
||||||
% (OLD_ID, NEW_ID, dbname)
|
|
||||||
).strip()
|
|
||||||
if not ans or ans[0].lower() not in "oOyY":
|
|
||||||
print("annulation")
|
|
||||||
sys.exit(-1)
|
|
||||||
|
|
||||||
|
|
||||||
cnx = psycopg2.connect(DBCNXSTRING)
|
|
||||||
|
|
||||||
cursor = cnx.cursor()
|
|
||||||
req = "update %s set %s=%%(new_id)s where %s=%%(old_id)s"
|
|
||||||
args = {"old_id": OLD_ID, "new_id": NEW_ID}
|
|
||||||
|
|
||||||
tables_attr = {
|
|
||||||
"notes_formsemestre": "responsable_id",
|
|
||||||
"entreprise_contact": "enseignant",
|
|
||||||
"admissions": "rapporteur",
|
|
||||||
"notes_moduleimpl": "responsable_id",
|
|
||||||
"notes_modules_enseignants": "ens_id",
|
|
||||||
"notes_notes": "uid",
|
|
||||||
"notes_notes_log": "uid",
|
|
||||||
"notes_appreciations": "author",
|
|
||||||
}
|
|
||||||
|
|
||||||
for (table, attr) in tables_attr.items():
|
|
||||||
cursor.execute(req % (table, attr, attr), args)
|
|
||||||
print("table %s: %s" % (table, cursor.statusmessage))
|
|
||||||
|
|
||||||
cnx.commit()
|
|
@ -58,7 +58,6 @@ redis==3.5.3
|
|||||||
reportlab==3.6.1
|
reportlab==3.6.1
|
||||||
requests==2.26.0
|
requests==2.26.0
|
||||||
rq==1.9.0
|
rq==1.9.0
|
||||||
six==1.16.0
|
|
||||||
SQLAlchemy==1.4.22
|
SQLAlchemy==1.4.22
|
||||||
toml==0.10.2
|
toml==0.10.2
|
||||||
urllib3==1.26.6
|
urllib3==1.26.6
|
||||||
|
Loading…
Reference in New Issue
Block a user