Пример #1
0
    def _get_order_string_from_model(self, identifiers_prefix, identifiers, model, resource, request, order_fields_rfs):
        """
        :param identifiers_prefix: because order strings are recursive if model relations property contains list of
               identifiers that was used for recursive searching the order string.
        :param identifiers: list of identifiers that conclusively identifies order string.
        :param model: django model class.
        :param resource: resource object.
        :param request: django HTTP request.
        :param order_fields_rfs: RFS of fields that is allowed to order.
        :return: db order method string that is obtained from model fields or methods.
        """
        current_identifier = identifiers[0]
        identifiers_suffix = identifiers[1:]

        if current_identifier not in order_fields_rfs:
            raise OrderIdentifierError

        model_field = get_field_or_none(model, current_identifier)
        model_method = get_method_or_none(model, current_identifier)

        if model_field and not identifiers_suffix and (not model_field.is_relation or model_field.related_model):
            return LOOKUP_SEP.join(identifiers_prefix + identifiers)
        elif model_field and model_field.is_relation and model_field.related_model:
            next_model = model_field.related_model
            next_resource = get_resource_or_none(request, next_model, getattr(resource, 'resource_typemapper'))
            return self._get_order_string_recursive(
                identifiers_prefix + [identifiers[0]], identifiers[1:],
                next_model, next_resource, request, order_fields_rfs[current_identifier].subfieldset
            )
        elif model_method and not identifiers_suffix:
            return self._get_order_string_from_method(
                model_method, identifiers_prefix, identifiers, model, resource, request, order_fields_rfs
            )
Пример #2
0
    def _get_sorter_from_model(self, identifiers_prefix, identifiers, direction, model, resource, request,
                               order_fields_rfs):
        """
        :param identifiers_prefix: because order strings are recursive if model relations property contains list of
               identifiers that was used for recursive searching the order string.
        :param identifiers: list of identifiers that conclusively identifies order string.
        :param direction: direction of ordering ASC or DESC.
        :param model: django model class.
        :param resource: resource object.
        :param request: django HTTP request.
        :param order_fields_rfs: RFS of fields that is allowed to order.
        :return: db order method string that is obtained from model fields or methods.
        """
        current_identifier = identifiers[0]
        identifiers_suffix = identifiers[1:]

        if current_identifier not in order_fields_rfs:
            raise OrderIdentifierError

        model_field = get_field_or_none(model, current_identifier)
        model_method = get_method_or_none(model, current_identifier)

        if model_field and not identifiers_suffix and (not model_field.is_relation or model_field.related_model):
            return DefaultSorter(identifiers_prefix + identifiers, direction)
        elif model_field and model_field.is_relation and model_field.related_model:
            next_model = model_field.related_model
            next_resource = get_resource_or_none(request, next_model, getattr(resource, 'resource_typemapper'))
            return self._get_sorter_recursive(
                identifiers_prefix + [identifiers[0]], identifiers[1:], direction,
                next_model, next_resource, request, order_fields_rfs[current_identifier].subfieldset
            )
        elif model_method and not identifiers_suffix:
            return self._get_sorter_from_method(
                model_method, identifiers_prefix, identifiers, direction, model, resource, request, order_fields_rfs
            )
Пример #3
0
    def _get_model_filter(self, identifiers_prefix, identifiers, model, resource, request, filters_fields_rfs):
        """
        :param identifiers_prefix: because filters are recursive if model relations property contains list of
               identifiers that was used for recursive searching the filter.
        :param identifiers: list of identifiers that conclusively identifies the filter.
        :param model: django model class.
        :param resource: resource object.
        :param request: django HTTP request.
        :param filters_fields_rfs: RFS of fields that is allowed to filter.
        :return: method returns filter from model fields or methods
        """
        current_identifier = identifiers[0]
        identifiers_suffix = identifiers[1:]

        if current_identifier not in filters_fields_rfs:
            raise FilterIdentifierError

        suffix = LOOKUP_SEP.join(identifiers_suffix)

        model_field = get_field_or_none(model, current_identifier)
        model_method = get_method_or_none(model, current_identifier)

        if model_field and model_field.filter and (not suffix or suffix in model_field.filter.get_suffixes()):
            return model_field.filter(identifiers_prefix, [current_identifier], identifiers_suffix, field=model_field)
        elif model_field and model_field.is_relation and model_field.related_model:
            # recursive search for filter via related model fields
            next_model = model_field.related_model
            next_resource = get_resource_or_none(request, next_model, getattr(resource, 'resource_typemapper'))
            return self._get_filter_recursive(
                identifiers_prefix + [identifiers[0]], identifiers[1:], next_model, next_resource, request,
                filters_fields_rfs[current_identifier].subfieldset
            )
        elif model_method:
            return self._get_method_filter(model_method, identifiers_prefix, [current_identifier], identifiers_suffix,
                                           model, resource, request, filters_fields_rfs)
Пример #4
0
    def _get_resource(self, obj):
        from pyston.serializer import get_resource_or_none

        if self.resource:
            return get_resource_or_none(self.resource.request, obj, self.resource.resource_typemapper)
        else:
            return None
Пример #5
0
    def _get_model_filter(self, identifiers_prefix, identifiers, model,
                          resource, request, filters_fields_rfs):
        """
        :param identifiers_prefix: because filters are recursive if model relations property contains list of
               identifiers that was used for recursive searching the filter.
        :param identifiers: list of identifiers that conclusively identifies the filter.
        :param model: django model class.
        :param resource: resource object.
        :param request: django HTTP request.
        :param filters_fields_rfs: RFS of fields that is allowed to filter.
        :return: method returns filter from model fields or methods
        """
        current_identifier = identifiers[0]
        identifiers_suffix = identifiers[1:]

        if current_identifier not in filters_fields_rfs:
            raise FilterIdentifierError

        suffix = LOOKUP_SEP.join(identifiers_suffix)

        model_field = get_field_or_none(model, current_identifier)
        model_method = get_method_or_none(model, current_identifier)

        if model_field and model_field.filter and (
                not suffix or suffix in model_field.filter.get_suffixes()):
            return model_field.filter(identifiers_prefix, [current_identifier],
                                      identifiers_suffix,
                                      field=model_field)
        elif model_field and model_field.is_relation and model_field.related_model:
            # recursive search for filter via related model fields
            next_model = model_field.related_model
            next_resource = get_resource_or_none(
                request, next_model, getattr(resource, 'resource_typemapper'))
            return self._get_filter_recursive(
                identifiers_prefix + [identifiers[0]], identifiers[1:],
                next_model, next_resource, request,
                filters_fields_rfs[current_identifier].subfieldset)
        elif model_method:
            return self._get_method_filter(model_method, identifiers_prefix,
                                           [current_identifier],
                                           identifiers_suffix, model, resource,
                                           request, filters_fields_rfs)
Пример #6
0
 def generate(self, exported_file, request, queryset, requested_fieldset,
              serialization_format):
     converter = get_converter_from_request(request)
     converted_dict = get_serializer(queryset, request=request).serialize(
         QuerysetIteratorHelper(queryset),
         serialization_format,
         requested_fieldset=requested_fieldset,
         lazy=True,
         allow_tags=converter.allow_tags)
     django_file = exported_file.file
     try:
         django_file.open('wb')
         converter.encode_to_stream(django_file.file,
                                    converted_dict,
                                    resource=get_resource_or_none(
                                        request, queryset.model),
                                    request=request,
                                    requested_fields=requested_fieldset)
     finally:
         django_file.close()
Пример #7
0
 def get_resource(self, model=None):
     return get_resource_or_none(self.request, model or self.model)
Пример #8
0
 def get_resource(self):
     return get_resource_or_none(self.request, self.model)
Пример #9
0
 def get_resource(self):
     return get_resource_or_none(self.request, self.model)