def __init__(self, name, callback=None, transaction=None): """Inicializuj instanci. Argumenty: name -- určuje název specifikace datového objektu pro resolver. callback -- pokud není None, bude daná funkce volána při každé změně v datovém objektu. Jde o funkci jednoho argumentu, kterým je (aktualizovaná) instance 'DBConfig'. """ key = (name, transaction) try: data = DBConfig._data_object_cache[key] except KeyError: from pytis.extensions import data_object data = data_object(name) if data is not None: DBConfig._data_object_cache[key] = data self._data = data self._transaction = transaction def lfunction(): data.select(transaction=transaction) self._row = data.fetchone() data.close() with_lock(self._data_object_lock, lfunction) self._key = [self._row[c.id()] for c in data.key()] if callback: self._callback = callback self._data.add_callback_on_change(self._on_change)
def init_select(view, data): sorting = view.sorting() if sorting is None: sorting = tuple([(k.id(), pytis.data.DESCENDANT) for k in data.key() if view.field(k.id()) is not None]) success, select_count = pytis.form.db_operation(data.select, sort=sorting, reuse=False) if not success: pytis.util.log(pytis.util.EVENT, 'Selhání databázové operace') return None return select_count
def dbupdate(row, values=(), transaction=None): """Provede update nad předaným řádkem. Argumenty: row -- předaná instance aktuálního PresentedRow values -- sekvence dvouprvkových sekvencí ('id', value) , kde 'id' je řetězcový identifikátor políčka a value je instance, kterou se bude políčko aktualizovat transaction -- instance pytis.data.DBTransactionDefault """ data = row.data() updaterow = row.row() key = data.key() if isinstance(key, (tuple, list,)): key = key[0] for col, val in values: updaterow[col] = val return pytis.form.db_operation(data.update, row[key.id()], updaterow, transaction=transaction)