Exemple #1
0
 def __init__(self, resolver, form, transaction, parameters):
     name = form.name()
     condition = form.condition()
     sorting = form.sorting()
     if condition is None:
         condition = parameters.get(name + '/' + pytis.output.P_CONDITION)
     if sorting is None:
         sorting = parameters.get(name + '/' + pytis.output.P_SORTING)
     super(_FormDataIterator, self).__init__(resolver, name, condition=condition,
                                             sorting=sorting, transaction=transaction)
Exemple #2
0
 def __init__(self, resolver, form, transaction, parameters):
     name = form.name()
     condition = form.condition()
     sorting = form.sorting()
     if condition is None:
         condition = parameters.get(name + '/' + pytis.output.P_CONDITION)
     if sorting is None:
         sorting = parameters.get(name + '/' + pytis.output.P_SORTING)
     super(_FormDataIterator, self).__init__(resolver, name, condition=condition,
                                             sorting=sorting, transaction=transaction)
Exemple #3
0
 def _make_agg_value(self, op, column):
     form = self._form
     if form is None:
         return lcg.Content()
     colid = column.id()
     if not pytis.form.has_access(form.name(), perm=pytis.data.Permission.VIEW,
                                  column=colid):
         return column.type().secret_export()
     data = form.data()
     condition = form.condition()
     return data.select_aggregate((op, colid,), condition=condition,
                                  transaction=self._transaction).value()
Exemple #4
0
 def _make_agg_value(self, op, column):
     form = self._form
     if form is None:
         return lcg.Content()
     colid = column.id()
     if not pytis.form.has_access(form.name(), perm=pytis.data.Permission.VIEW,
                                  column=colid):
         return column.type().secret_export()
     data = form.data()
     condition = form.condition()
     return data.select_aggregate((op, colid,), condition=condition,
                                  transaction=self._transaction).value()
Exemple #5
0
 def _initial_dictionary(self, form, form_bindings, codebooks, current_row, parameters):
     dictionary = _ProxyDict()
     if form is not None:
         import pytis.form # must be placed before first `pytis' use here
         if current_row is None:
             dictionary['data'] = _FormDataIterator(self._resolver, form,
                                                    transaction=self._transaction,
                                                    parameters=parameters)
         else:
             # Using `data' iteration in row templates is most likely an error.
             # And since it may cause various performance or system problems we forbid it.
             dictionary['data'] = _FakeDataIterator()
         if current_row is None:
             current_row = form.current_row()
         if current_row is None:
             current_row_dictionary = LCGFormatter._DummyDict()
         else:
             current_row_dictionary = dict([(k, current_row.format(k, secure=True),)
                                            for k in current_row.keys()
                                            if not isinstance(current_row[k].type(),
                                                              pytis.data.Binary)])
         dictionary['current_row'] = current_row_dictionary
         dictionary['table'] = self._make_table
         dictionary['agg'] = agg = _ProxyDict()
         for name, op in(('min', pytis.data.Data.AGG_MIN,),
                         ('max', pytis.data.Data.AGG_MAX,),
                         ('count', pytis.data.Data.AGG_COUNT,),
                         ('sum', pytis.data.Data.AGG_SUM,),
                         ('avg', pytis.data.Data.AGG_AVG,),):
             def value(op=op):
                 return self._make_agg(op)
             agg[name] = value
         if form_bindings:
             dictionary['Binding'] = binding_dictionary = _ProxyDict()
             for binding in form_bindings:
                 form_name = binding.name()
                 if form_name is None:
                     continue
                 if ((pytis.form.has_access(form_name) and
                      pytis.form.has_access(form_name, perm=pytis.data.Permission.PRINT))):
                     # I tried to use closure here, but it produced unexpected results
                     class MakeBinding(object):
                         def __init__(self, binding, processor, current_row):
                             self._binding = binding
                             self._current_row = current_row
                             self._processor = processor
                         def __call__(self):
                             return self._processor(self._binding, self._current_row)
                     binding_id = re.sub('[^A-Za-z0-9_]', '_', binding.id())
                     binding_dictionary[binding_id] = MakeBinding(binding,
                                                                  self._make_binding,
                                                                  current_row)
         if codebooks:
             dictionary['codebook'] = codebook_dictionary = {}
             form_name = form.name()
             for field_id, cb_fields, cb in codebooks:
                 permitted = current_row.permitted(field_id, pytis.data.Permission.VIEW)
                 codebook_dictionary[field_id] = field_dictionary = _ProxyDict()
                 for cb_id, _cb_label in cb_fields:
                     if (permitted and
                         pytis.form.has_access(cb, perm=pytis.data.Permission.VIEW,
                                               column=cb_id)):
                         def cb_value(current_row=current_row, field_id=field_id,
                                      cb_id=cb_id):
                             return current_row.cb_value(field_id, cb_id).export()
                     else:
                         def cb_value(current_row=current_row, field_id=field_id,
                                      cb_id=cb_id):
                             return current_row.cb_value(field_id, cb_id).secret_export()
                     field_dictionary[cb_id] = cb_value
     return dictionary
Exemple #6
0
 def _initial_dictionary(self, form, form_bindings, codebooks, current_row, parameters):
     dictionary = _ProxyDict()
     if form is not None:
         import pytis.form # must be placed before first `pytis' use here
         if current_row is None:
             dictionary['data'] = _FormDataIterator(self._resolver, form,
                                                    transaction=self._transaction,
                                                    parameters=parameters)
         else:
             # Using `data' iteration in row templates is most likely an error.
             # And since it may cause various performance or system problems we forbid it.
             dictionary['data'] = _FakeDataIterator()
         if current_row is None:
             current_row = form.current_row()
         if current_row is None:
             current_row_dictionary = LCGFormatter._DummyDict()
         else:
             current_row_dictionary = dict([(k, current_row.format(k, secure=True),)
                                            for k in current_row.keys()
                                            if not isinstance(current_row[k].type(),
                                                              pytis.data.Binary)])
         dictionary['current_row'] = current_row_dictionary
         dictionary['table'] = self._make_table
         dictionary['agg'] = agg = _ProxyDict()
         for name, op in(('min', pytis.data.Data.AGG_MIN,),
                         ('max', pytis.data.Data.AGG_MAX,),
                         ('count', pytis.data.Data.AGG_COUNT,),
                         ('sum', pytis.data.Data.AGG_SUM,),
                         ('avg', pytis.data.Data.AGG_AVG,),):
             def value(op=op):
                 return self._make_agg(op)
             agg[name] = value
         if form_bindings:
             dictionary['Binding'] = binding_dictionary = _ProxyDict()
             for binding in form_bindings:
                 form_name = binding.name()
                 if form_name is None:
                     continue
                 if ((pytis.form.has_access(form_name) and
                      pytis.form.has_access(form_name, perm=pytis.data.Permission.PRINT))):
                     # I tried to use closure here, but it produced unexpected results
                     class MakeBinding(object):
                         def __init__(self, binding, processor, current_row):
                             self._binding = binding
                             self._current_row = current_row
                             self._processor = processor
                         def __call__(self):
                             return self._processor(self._binding, self._current_row)
                     binding_id = re.sub('[^A-Za-z0-9_]', '_', binding.id())
                     binding_dictionary[binding_id] = MakeBinding(binding,
                                                                  self._make_binding,
                                                                  current_row)
         if codebooks:
             dictionary['codebook'] = codebook_dictionary = {}
             form_name = form.name()
             for field_id, cb_fields, cb in codebooks:
                 permitted = current_row.permitted(field_id, pytis.data.Permission.VIEW)
                 codebook_dictionary[field_id] = field_dictionary = _ProxyDict()
                 for cb_id, _cb_label in cb_fields:
                     if (permitted and
                         pytis.form.has_access(cb, perm=pytis.data.Permission.VIEW,
                                               column=cb_id)):
                         def cb_value(current_row=current_row, field_id=field_id,
                                      cb_id=cb_id):
                             return current_row.cb_value(field_id, cb_id).export()
                     else:
                         def cb_value(current_row=current_row, field_id=field_id,
                                      cb_id=cb_id):
                             return current_row.cb_value(field_id, cb_id).secret_export()
                     field_dictionary[cb_id] = cb_value
     return dictionary