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)
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)
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)