def search(self, request):
        params = utils.parse_request_params(ProductProjectionsQuerySchema,
                                            request)
        results = [
            self._convert_product_projection(product, params["staged"])
            for product in self.model.objects.values()
        ]
        results = [x for x in results if x]
        if params.get("limit"):
            results = results[:params["limit"]]

        if params.get("expand"):
            expanded_results = []
            for result in results:
                expanded_results.append(self._expand(request, result))
            results = expanded_results

        data = {
            "count": len(results),
            "total": len(results),
            "offset": 0,
            "results": results,
        }
        content = schemas.ProductProjectionPagedQueryResponseSchema().dumps(
            data)
        return create_commercetools_response(request, text=content)
    def search(self, request):
        params = utils.parse_request_params(_ProductProjectionQuerySchema, request)

        limit = params.get("limit")

        results = []
        found = 0
        for obj in self.model.objects.values():
            expanded_obj = self._expand(request, obj)
            product = ProductSchema().load(expanded_obj)

            result = self._convert_product_projection(product, params["staged"])
            if result:
                results.append(results)
                found += 1

            if limit is not None and found == limit:
                break

        data = {
            "count": len(results),
            "total": len(results),  # FIXME
            "offset": 0,
            "results": results,
            "limit": limit,
        }
        content = ProductProjectionPagedQueryResponseSchema().dumps(data)
        return create_commercetools_response(request, text=content)
    def _expand(self, request: _RequestObjectProxy, raw_obj):
        params = utils.parse_request_params(self._schema_query_params, request)
        if "expand" not in params:
            return raw_obj

        expanded_obj = copy.deepcopy(raw_obj)

        for expand_term in params["expand"]:
            self._expand_obj(expanded_obj, expand_term)

        return expanded_obj
    def get_by_key(self, request, key):
        params = utils.parse_request_params(_ProductProjectionQuerySchema, request)
        obj = self.model.get_by_key(key)
        if obj:
            expanded_obj = self._expand(request, obj)
            product = ProductSchema().load(expanded_obj)

            result = self._convert_product_projection(product, params["staged"])
            if not result:
                return create_commercetools_response(request, status_code=404)
            content = ProductProjectionSchema().dumps(result)
            return create_commercetools_response(request, text=content)
        return create_commercetools_response(request, status_code=404)
    def query(self, request):
        params = utils.parse_request_params(abstract.AbstractQuerySchema,
                                            request)
        results = self.model.query(params.get("where"))
        total_count = len(results)
        if params.get("limit"):
            results = results[:params["limit"]]

        data = {
            "count": len(results),
            "total": total_count,
            "offset": 0,
            "results": self.model._resource_schema().load(results, many=True),
        }
        content = self._schema_query_response().dumps(data)
        return create_response(request, text=content)
Пример #6
0
    def upload_image(self, request, id):
        obj = self.model.get_by_id(id)
        if not obj:
            return create_commercetools_response(request, status_code=404)

        obj = copy.deepcopy(obj)

        params = parse_request_params(UploadImageQuerySchema, request)
        target = _get_target_obj(obj, staged=params["staged"])
        filename = params["filename"]

        variant = _get_variant(target, sku=params["sku"])
        if not variant["images"]:
            variant["images"] = []
        image_schema = ImageSchema()
        variant["images"].append(
            image_schema.dump(
                types.Image(url=f"cdn.commercetools.local/detail-{filename}")))
        self.model.save(obj)
        return create_commercetools_response(request, json=obj)
Пример #7
0
    def query(self, request):
        params = utils.parse_request_params(self._schema_query_params, request)
        results = self.model.query(params.get("where"))
        total_count = len(results)
        if params.get("limit"):
            results = results[:params["limit"]]

        if params.get("expand"):
            expanded_results = []
            for result in results:
                expanded_results.append(self._expand(request, result))
            results = expanded_results

        data = {
            "count": len(results),
            "total": total_count,
            "offset": 0,
            "results": self.model._resource_schema().load(results, many=True),
        }
        content = self._schema_query_response().dumps(data)
        return create_commercetools_response(request, text=content)