Beispiel #1
0
    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)
Beispiel #2
0
 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
Beispiel #3
0
 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
Beispiel #4
0
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)