예제 #1
0
    def list(self, other_pks=None, filters=None):
        '''
        List returns back list of URI
        In case of multiple pks, We guess the pk
        by using '<modelname>_id' as the field convention
        '''
        try:
            pk = primary_key(self.cls)
        except KeyNotFoundException:
            pk = None

        filter_dict = dict()

        if filters:
            filter_dict = {k: v for k, v in filters.iteritems()}
            filter_dict.pop('format', None)
            filter_dict.pop('page', None)
            filter_dict.pop('sort_by', None)

        if other_pks:
            query_pks = dict()

            # Use only those keys which are primary keys
            # and pick them up from the passed dict
            for key in class_keys(self.cls):
                if key in other_pks:
                    query_pks[key] = other_pks[key]

            query_pks.update(filter_dict)

            if pk:
                queryset = self.session.query(self.cls.__dict__[pk]).filter_by(
                    **query_pks).all()
            else:
                queryset = self.session.query(self.cls).filter_by(
                    **query_pks).all()
        else:
            if filter_dict:
                if pk:
                    queryset = self.session.query(
                        self.cls.__dict__[pk]).filter_by(
                        **filter_dict).all()
                else:
                    queryset = self.session.query(self.cls).filter_by(
                        **filter_dict).all()
            else:
                if pk:
                    queryset = self.session.query(self.cls.__dict__[pk]).all()
                else:
                    # Limit to 1000 rows, this is worst case scenario
                    queryset = self.session.query(self.cls).limit(1000).all()

        return queryset
예제 #2
0
    def get_default_fields(self):
        ret = SortedDict()

        try:
            # URI field for get pk field
            pk_field = primary_key(self.cls.__class__)
        except KeyNotFoundException:
            return ret

        request = self.context['request']
        ret["href"] = AlchemyUriField(source=pk_field,
                                      path=request.build_absolute_uri(
                                          request.path))

        return ret
예제 #3
0
    def get_default_fields(self):
        ret = SortedDict()

        try:
            # URI field for get pk field
            pk_field = primary_key(self.cls.__class__)
        except KeyNotFoundException:
            return ret

        request = self.context['request']
        ret["href"] = AlchemyUriField(source=pk_field,
                                      path=request.build_absolute_uri(
                                          request.path))

        return ret
예제 #4
0
    def get_default_fields(self):

        ret = SortedDict()

        mapper = class_mapper(self.cls.__class__)

        try:
            # URI field for get pk field
            pk_field = primary_key(self.cls.__class__)
        except KeyNotFoundException:
            return ret

        r = self.context['request']
        ret['href'] = AlchemyUriField(source=pk_field,
                                      path=r.build_absolute_uri(r.path))

        # Get all the Column fields
        for col_prop in mapper.iterate_properties:
            if isinstance(col_prop, ColumnProperty):
                field_nm = str(col_prop).split('.')[1]
                field_cls = col_prop.columns[0].type.__class__

                assert field_cls in self.field_mapping, \
                    "Field %s has not been mapped" % field_cls

                ret[field_nm] = self.field_mapping[field_cls]()

        # Get all the relationship fields
        for rel_prop in mapper.iterate_properties:
            if isinstance(rel_prop, RelationshipProperty):
                field_nm = str(rel_prop).split('.')[1]
                # many becomes same as uselist so that
                # RelatedField can iterate over the queryset
                ret[field_nm] = AlchemyRelatedField(source=field_nm,
                                                    many=rel_prop.uselist,
                                                    path=r.build_absolute_uri(
                                                        r.path))

        return ret
예제 #5
0
    def list(self, other_pks=None, filters=None):
        '''
        List returns back list of URI
        In case of multiple pks, We guess the pk
        by using '<modelname>_id' as the field convention
        '''
        try:
            pk = primary_key(self.cls)
        except KeyNotFoundException:
            return list()

        filter_dict = dict()

        if filters:
            filter_dict = {k: v for k, v in filters.iteritems()}
            filter_dict.pop('format', None)
            filter_dict.pop('page', None)
            filter_dict.pop('sort_by', None)

        if other_pks:
            query_pks = dict()

            # Use only those keys which are primary keys
            # and pick them up from the passed dict
            for key in class_keys(self.cls):
                if key in other_pks:
                    query_pks[key] = other_pks[key]

            query_pks.update(filter_dict)
            queryset = self.session.query(
                self.cls.__dict__[pk]).filter_by(**query_pks).all()
        else:
            if filter_dict:
                queryset = self.session.query(
                    self.cls.__dict__[pk]).filter_by(**filter_dict).all()
            else:
                queryset = self.session.query(self.cls.__dict__[pk]).all()

        return queryset
예제 #6
0
    def get_default_fields(self):

        ret = SortedDict()

        mapper = class_mapper(self.cls.__class__)

        try:
            # URI field for get pk field
            pk_field = primary_key(self.cls.__class__)
        except KeyNotFoundException:
            return ret

        r = self.context['request']
        ret['href'] = AlchemyUriField(source=pk_field,
                                      path=r.build_absolute_uri(r.path))

        # Get all the Column fields
        for col_prop in mapper.iterate_properties:
            if isinstance(col_prop, ColumnProperty):
                field_nm = str(col_prop).split('.')[1]
                field_cls = col_prop.columns[0].type.__class__

                assert field_cls in self.field_mapping, \
                    "Field %s has not been mapped" % field_cls

                ret[field_nm] = self.field_mapping[field_cls]()

        # Get all the relationship fields
        for rel_prop in mapper.iterate_properties:
            if isinstance(rel_prop, RelationshipProperty):
                field_nm = str(rel_prop).split('.')[1]
                # many becomes same as uselist so that
                # RelatedField can iterate over the queryset
                ret[field_nm] = AlchemyRelatedField(source=field_nm,
                                                    many=rel_prop.uselist,
                                                    path=r.build_absolute_uri(
                                                        r.path))

        return ret