def _get_default_select(spec): 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 resolver = pytis.util.resolver() try: view = resolver.get(spec, 'view_spec') except: pytis.util.log(pytis.util.OPERATIONAL, "Nepodařilo se vytvořit view_spec") return None from pytis.extensions import data_object try: data = data_object(spec) except: pytis.util.log(pytis.util.OPERATIONAL, "Nepodařilo se vytvořit datový objekt") return None data = data_object(spec) select_count = init_select(view, data) if select_count: print "Default select pro specifikaci %s vrací %s řádků" % (spec, select_count,) data.fetchone()
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__(self, spec, columns, condition=None, sort=(), show_headers=True, klass=None, **attrs): """Vytvoř tabulku, jejíž obsah je získán z databázového objektu. Argumenty: spec -- název specifikace columns -- seznam sloupců, které se použijí v HTML tabulce condition -- podmínka odpovídající argumentu volání pytis.data.select() sort -- řazení odpovídající argumentu volání pytis.data.select() show_headers -- pokud je True, zobrazí se záhlaví sloupců, na základě 'label' z jednotlivých políček klass -- None nebo funkce jednoho argumentu, kterým je řádek tabulky a která vrací None nebo odpovídající styl attrs -- atributy pro HyperText.TABLE Vrací instanci HyperText.TABLE. """ self._spec = spec self._columns = columns self._condition = condition self._sort = sort self._view = pytis.util.resolver().get(self._spec, 'view_spec') self._data = data_object(self._spec) self._fields = self._get_fields() self._klass = klass self._table = TABLE(**attrs) if show_headers: self._headers = self._get_headers() self._append_headers()
def _get_default_select(spec): 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 resolver = pytis.util.resolver() try: view = resolver.get(spec, 'view_spec') except: pytis.util.log(pytis.util.OPERATIONAL, "Nepodařilo se vytvořit view_spec") return None from pytis.extensions import data_object try: data = data_object(spec) except: pytis.util.log(pytis.util.OPERATIONAL, "Nepodařilo se vytvořit datový objekt") return None data = data_object(spec) select_count = init_select(view, data) if select_count: print "Default select pro specifikaci %s vrací %s řádků" % ( spec, select_count, ) data.fetchone()
def form_validate(spec, prefill): # Sestavíme datový objekt data = data_object(spec) if not data: return None, None failed = [] row = [] for c in data.columns(): if c.id() in prefill: value, error = c.type().validate(prefill[c.id()]) if error: failed.append(c.id()) continue else: row.append((c.id(), value)) if len(failed) > 0: return None, failed else: return pytis.data.Row(row), None