forked from ScoDoc/ScoDoc
petit nettoyage
This commit is contained in:
parent
80dd25ba02
commit
6cd868b7a3
app
@ -212,7 +212,6 @@ def DBSelectArgs(
|
||||
+ limit
|
||||
+ offset
|
||||
)
|
||||
# open('/tmp/select.log','a').write( req % vals + '\n' )
|
||||
try:
|
||||
cursor.execute(req, vals)
|
||||
except:
|
||||
@ -259,9 +258,6 @@ def DBDelete(cnx, table, colid, val, commit=False):
|
||||
|
||||
# --------------------------------------------------------------------
|
||||
|
||||
# REQLOG = open('/tmp/req.log', 'w') # DEBUG
|
||||
# REQN = 0
|
||||
|
||||
|
||||
class EditableTable(object):
|
||||
"""--- generic class: SQL table with create/edit/list/delete"""
|
||||
@ -276,7 +272,6 @@ class EditableTable(object):
|
||||
input_formators={},
|
||||
aux_tables=[],
|
||||
convert_null_outputs_to_empty=True,
|
||||
callback_on_write=None,
|
||||
allow_set_id=False,
|
||||
html_quote=True,
|
||||
fields_creators={}, # { field : [ sql_command_to_create_it ] }
|
||||
@ -290,16 +285,13 @@ class EditableTable(object):
|
||||
self.output_formators = output_formators
|
||||
self.input_formators = input_formators
|
||||
self.convert_null_outputs_to_empty = convert_null_outputs_to_empty
|
||||
self.callback_on_write = (
|
||||
callback_on_write # called after each modification (USELESS and unused)
|
||||
)
|
||||
self.allow_set_id = allow_set_id
|
||||
self.html_quote = html_quote
|
||||
self.fields_creators = fields_creators
|
||||
self.filter_nulls = filter_nulls
|
||||
self.sql_default_values = None
|
||||
|
||||
def create(self, cnx, args, has_uniq_values=False):
|
||||
def create(self, cnx, args):
|
||||
"create object in table"
|
||||
vals = dictfilter(args, self.dbfields, self.filter_nulls)
|
||||
if self.id_name in vals and not self.allow_set_id:
|
||||
@ -307,7 +299,7 @@ class EditableTable(object):
|
||||
if self.html_quote:
|
||||
quote_dict(vals) # quote all HTML markup
|
||||
# format value
|
||||
for title in vals.keys():
|
||||
for title in vals:
|
||||
if title in self.input_formators:
|
||||
vals[title] = self.input_formators[title](vals[title])
|
||||
# insert
|
||||
@ -319,23 +311,11 @@ class EditableTable(object):
|
||||
% {"id_name": self.id_name, "table_name": self.table_name, "oid": oid}
|
||||
)
|
||||
new_id = cursor.fetchone()[0]
|
||||
if has_uniq_values: # XXX probably obsolete
|
||||
# check all tuples (without id_name) are UNIQUE !
|
||||
res = DBSelectArgs(cnx, self.table_name, vals, what=[self.id_name])
|
||||
if len(res) != 1:
|
||||
# BUG !
|
||||
log("create: BUG table_name=%s args=%s" % (self.table_name, str(args)))
|
||||
assert len(res) == 1, "len(res) = %d != 1 !" % len(res)
|
||||
if self.callback_on_write:
|
||||
self.callback_on_write()
|
||||
|
||||
return new_id
|
||||
|
||||
def delete(self, cnx, oid, commit=True):
|
||||
"delete tuple"
|
||||
DBDelete(cnx, self.table_name, self.id_name, oid, commit=commit)
|
||||
if self.callback_on_write:
|
||||
self.callback_on_write()
|
||||
|
||||
def list(
|
||||
self,
|
||||
@ -349,10 +329,6 @@ class EditableTable(object):
|
||||
offset="",
|
||||
):
|
||||
"returns list of dicts"
|
||||
# REQLOG.write('%s: %s by %s (%s) %d\n'%(self.table_name,args,sys._getframe(1).f_code.co_name, sys._getframe(2).f_code.co_name, REQN))
|
||||
# REQLOG.flush()
|
||||
# global REQN
|
||||
# REQN = REQN + 1
|
||||
vals = dictfilter(args, self.dbfields, self.filter_nulls)
|
||||
if not sortkey:
|
||||
sortkey = self.sortkey
|
||||
@ -408,60 +384,10 @@ class EditableTable(object):
|
||||
where="%s=%%(%s)s" % (self.id_name, self.id_name),
|
||||
commit=True,
|
||||
)
|
||||
if self.callback_on_write:
|
||||
self.callback_on_write()
|
||||
|
||||
def get_sql_default_values(self, cnx):
|
||||
"return dict with SQL default values for each field"
|
||||
if self.sql_default_values is None: # not cached
|
||||
# We insert a new tuple, get the values and delete it
|
||||
# XXX non, car certaines tables ne peuvent creer de tuples
|
||||
# a default, a cause des references ou contraintes d'intégrité.
|
||||
# oid = self.create(cnx, {})
|
||||
# vals = self.list(cnx, args= {self.id_name : oid})[0]
|
||||
# self.delete(cnx, oid)
|
||||
# self.sql_default_values = vals
|
||||
#
|
||||
# Méthode spécifique à postgresql (>= 7.4)
|
||||
cursor = cnx.cursor(cursor_factory=ScoDocCursor)
|
||||
cursor.execute(
|
||||
"SELECT column_name, data_type, column_default FROM information_schema.columns WHERE table_name = '%s'"
|
||||
% self.table_name
|
||||
)
|
||||
d = {}
|
||||
for info in cursor.dictfetchall():
|
||||
v = info["column_default"]
|
||||
# strip type information if present (eg 'hello'::text)
|
||||
if v:
|
||||
v = v.split("::")[0]
|
||||
# convert type to Python type
|
||||
if v:
|
||||
if info["data_type"] == "text":
|
||||
log('get: v="%s"' % v)
|
||||
if v[0] == v[-1] == "'":
|
||||
v = v[1:-1] # strip quotes
|
||||
elif v[:2] == "E'" and v[-1] == "'":
|
||||
v = v[2:-1] # postgresql string with escapes
|
||||
v = v.replace(
|
||||
"\\012", "\n"
|
||||
) # fix (je ne comprend pas bien pourquoi les valeurs sont ici quotées, ce n'est pas le cas dans les tables ordinaires)
|
||||
v = v.replace("''", "'") # idem
|
||||
log('--> v="%s"' % v)
|
||||
elif info["data_type"] == "real":
|
||||
v = float(v)
|
||||
elif info["data_type"] == "integer":
|
||||
v = int(v)
|
||||
# elif info['data_type'] == 'date':
|
||||
# pass # XXX todo
|
||||
else:
|
||||
log("Warning: unhandled SQL type in get_sql_default_values")
|
||||
d[info["column_name"]] = v
|
||||
self.sql_default_values = d
|
||||
return self.sql_default_values
|
||||
|
||||
|
||||
def dictfilter(d, fields, filter_nulls=True):
|
||||
# returns a copy of d with only keys listed in "fields" and non null values
|
||||
"""returns a copy of d with only keys listed in "fields" and non null values"""
|
||||
r = {}
|
||||
for f in fields:
|
||||
if f in d and (d[f] != None or not filter_nulls):
|
||||
@ -469,7 +395,6 @@ def dictfilter(d, fields, filter_nulls=True):
|
||||
val = d[f].strip()
|
||||
except:
|
||||
val = d[f]
|
||||
# if val != '': not a good idea: how to suppress a field ?
|
||||
r[f] = val
|
||||
return r
|
||||
|
||||
|
@ -734,7 +734,7 @@ scolar_events_edit = _scolar_eventsEditor.edit
|
||||
|
||||
def scolar_events_create(cnx, args):
|
||||
# several "events" may share the same values
|
||||
_scolar_eventsEditor.create(cnx, args, has_uniq_values=False)
|
||||
_scolar_eventsEditor.create(cnx, args)
|
||||
|
||||
|
||||
# --------
|
||||
|
@ -109,7 +109,7 @@ def add(typ, object=None, text="", url=None, max_frequency=False):
|
||||
_LAST_NEWS[(authuser_name, typ, object)] = t
|
||||
|
||||
_send_news_by_mail(args)
|
||||
return scolar_news_create(cnx, args, has_uniq_values=False)
|
||||
return scolar_news_create(cnx, args)
|
||||
|
||||
|
||||
def scolar_news_summary(context, n=5):
|
||||
|
@ -1848,7 +1848,7 @@ def appreciation_add_form(
|
||||
args["id"] = id
|
||||
sco_etud.appreciations_edit(cnx, args)
|
||||
else: # nouvelle
|
||||
sco_etud.appreciations_create(cnx, args, has_uniq_values=False)
|
||||
sco_etud.appreciations_create(cnx, args)
|
||||
# log
|
||||
logdb(
|
||||
cnx,
|
||||
|
Loading…
Reference in New Issue
Block a user