Exemple #1
0
 def _get_old_value_of_scalar_attr(self, org_request, attr_name):
     deleted_or_unchanged = sqla_inspect(
         org_request).attrs[attr_name].history.non_added()
     if deleted_or_unchanged:
         [old_value] = deleted_or_unchanged
         return old_value
     return None
Exemple #2
0
 def _verify_org_group_specified(self, org_request):
     assert isinstance(org_request, models.RegistrationRequest)
     if org_request.org_group is None:
         raise ValueError('Acceptation of a registration request cannot be '
                          'done when its `Org Group` field is unspecified.')
     assert isinstance(org_request.org_group, models.OrgGroup)
     assert sqla_inspect(org_request.org_group).persistent
Exemple #3
0
def column_cache(table_class):
    fsm_fields = [
        col for col in sqla_inspect(table_class).columns
        if isinstance(col.type, FSMField)
    ]

    if len(fsm_fields) == 0:
        raise exc.SetupError("No FSMField found in model")
    elif len(fsm_fields) > 1:
        raise exc.SetupError(
            "More than one FSMField found in model ({})".format(fsm_fields))
    return fsm_fields[0]
Exemple #4
0
 def addValidators(self):
     if self.obj is None:
         return
     ormMapper = sqla_inspect(self.obj.__class__, raiseerr=False)
     if ormMapper is None:
         return
     self._obj = self.obj  # needed for Unique
     for name, field in self._fields.items():
         if not getattr(field, 'disabled', False):
             ormProp = ormMapper.attrs.get(name)
             extra = self.extvtors.setdefault(name, [])
             if len(getattr(ormProp, 'columns', [])) == 1:
                 addValidators(field, ormProp.columns[0], extra, DBSession,
                               self.obj.__class__)
Exemple #5
0
def COLUMN_CACHE(table_class):
    fsm_fields = [
        col
        for col in sqla_inspect(table_class).columns
        if isinstance(col.type, FSMField)
    ]

    if len(fsm_fields) == 0:
        raise exc.SetupError('No FSMField found in model')
    elif len(fsm_fields) > 1:
        raise exc.SetupError(
            'More than one FSMField found in model ({})'.format(
                fsm_fields
            )
        )
    return fsm_fields[0]
Exemple #6
0
 def _s_expunge(self):
     """
         expunge an object from its session
     """
     session = sqla_inspect(self).session
     session.expunge(self)
Exemple #7
0
 def _s_expunge(self):
     session = sqla_inspect(self).session
     session.expunge(self)
Exemple #8
0
 def _get_sqla_session(self, org_request):
     return sqla_inspect(org_request).session
Exemple #9
0
 def save(self):
     ormObj = sqla_inspect(self.obj, raiseerr=False)
     if ormObj and ormObj.transient:
         self.obj.insert()
Exemple #10
0
    def get_filters(self, cls):
        """
        Parse search fields and values to filters.
        """
        from .exp_format import raise_args_exception

        filters = []
        relationships = sqla_inspect(cls).mapper.relationships
        all_field_items = self.array_field.items() + \
                          self.equal_field.items() + \
                          self.like_field.items()

        for key, value in all_field_items:
            if '.' in key:
                # set children attribute filters
                father_field, child_field = key.split(".", 1)

                if father_field not in relationships:
                    raise_args_exception(key)

                child_cls = relationships[father_field].mapper.class_
                if child_field == '_match':
                    # set children _match filters
                    fc = self._get_match_filter(child_cls, value)
                elif key in self.array_field:
                    fc = getattr(child_cls, child_field).in_(value)
                elif key in self.like_field:
                    fc = getattr(child_cls, child_field).like(value,
                                                              escape='/')
                else:
                    fc = getattr(child_cls, child_field) == value
                    # 这里到底是子资源过滤还是条件过滤
                    if not relationships[father_field].uselist:
                        # uselist = false
                        obj = get_session().query(child_cls).filter(fc).first()
                        _filter = getattr(cls, father_field) == obj
                        filters.append(_filter)
                        continue
                if relationships[father_field].uselist:
                    _filter = getattr(cls, father_field).any(fc)
                else:
                    _filter = getattr(cls, father_field).has(fc)
            else:
                # set attribute filters
                if not hasattr(cls, key):
                    raise_args_exception(key)

                if key in self.array_field:
                    _filter = getattr(cls, key).in_(value)
                elif key in self.like_field:
                    _filter = getattr(cls, key).like(value, escape='/')
                else:
                    _filter = getattr(cls, key) == value
            filters.append(_filter)

        # set match filters
        args = request.args
        match_keywords = args.get('_match')
        if match_keywords:
            filters.append(self._get_match_filter(cls, match_keywords))
        return filters