def get_queryset(self): try: return Resources.shortlist() except Resources.QueryError: logger.warning(f"Query error | {self.__class__.__name__}", exc_info=True) raise QueryError()
def post(self, request, *args, **kwargs): data = request.data try: ids = data['ids'] except KeyError as ex: logger.warning(f"'id' not specified | {self.__class__.__name__}") raise NoParameterSpecified('ids') if not isinstance(ids, list): logger.warning( f"'ids' has wrong type. Type: {type(ids)} | {self.__class__.__name__}" ) raise ParameterExceptions(detail="'ids' must be list object.") try: Resources.bulk_delete(ids, request.user) except Resources.UpdateError: logger.warning("Update error | {self.__class__.__name__}") raise UpdateError() return Response(data={'correct': True}, status=status.HTTP_202_ACCEPTED)
def get_object(self): s_id = self.kwargs['s_id'] try: resource = Resources.get(s_id) except Resource.DoesNotExist: logger.warning( f"Can`t get object 'Specification' with id: {s_id}. | {self.__class__.__name__}", exc_info=True) raise Http404() self.check_object_permissions(request=self.request, obj=resource)
def get_object(self): r_id = self.kwargs['r_id'] try: resource = Resources.get(r_id) except Resource.DoesNotExist: logger.warning( f"Can`t get object 'Resource'. | {self.__class__.__name__}", exc_info=True) raise Http404() return resource
def get_object(self): r_id = self.kwargs['r_id'] try: resource = Resources.detail(r_id) except Resources.ResourceDoesNotExist: logger.warning( f"Can`t get object 'Resource' with id: {r_id} | {self.__class__.__name__}" ) raise Http404() return resource
def build_set(cls, specification, amount, from_resources=False, user=None): try: with transaction.atomic(): if not isinstance(specification, Specification): if from_resources: specification = Specification.objects.prefetch_related( 'res_specs', 'res_specs__resource').get(id=specification) else: specification = Specification.objects.get( id=specification) resources = [] actions = [] operator = Operator.objects.get_or_create_operator(user) if from_resources: for res_spec in specification.res_specs.all(): resource = res_spec.resource if resource.amount < float( res_spec.amount) * float(amount): raise cls.CantBuildSet() else: action = Resources.change_amount( resource, -float(res_spec.amount) * float(amount), operator, False) resources.append(resource) actions.append(action) Resource.objects.bulk_update(resources, fields=['amount']) value = 'from_resources=True' else: value = 'from_resources=False' specification.amount += amount specification.save() except DatabaseError as ex: logger.error(f"Error while building set. | {cls.__name__}", exc_info=True) raise cls.CantBuildSet()
def edit(cls, specification, name: str = None, product_id: str = None, price: float = None, coefficient: float = None, resource_to_add: List[Dict[str, str]] = None, resource_to_delete: List[str] = None, category_name: str = None, storage_amount: int = None, user=None): try: with transaction.atomic(): specification = cls.get(specification) operator = Operator.objects.get_or_create_operator(user) value_data = [] # Model field block # ---------- if name is not None: specification.name = name value_data.append(f"name={name}") if product_id is not None: specification.product_id = product_id value_data.append(f"product_id={product_id}") # ----------- # Setting category, price, coefficient, amount block # ----------- actions = [] if category_name is not None: if category_name != "": category = SpecificationCategory.objects.get_or_create( name=category_name)[0] category, category_action = cls.set_category( specification, category, operator, False) actions.append(category_action) value_data.append(f"category={category_name}") if category.coefficient is not None: coefficient, coefficient_action = cls.set_coefficient( specification, category.coefficient, operator, False) else: specification.category = None if price is not None: _, price_action = cls.set_price(specification, price, operator, False) actions.append(price_action) if coefficient is not None: _, coefficient_action = cls.set_coefficient( specification, coefficient, operator, False) actions.append(coefficient_action) if storage_amount is not None: _, amount_action = cls.set_amount(specification, storage_amount, operator, False) actions.append(amount_action) # ----------- # Resource block # ----------- if resource_to_delete is not None and len( resource_to_delete) != 0: SpecificationResource.objects.filter( specification=specification, resource_id__in=resource_to_delete).delete() if resource_to_add is not None and len(resource_to_add) != 0: res_specs = [] _resources = [] for resource in resource_to_add: res = Resource.objects.get(id=resource['id']) res_specs.append( SpecificationResource.objects.create( resource_id=resource['id'], amount=resource['amount'], specification=specification)) _resources.append({ 'resources_create': res, 'amount': resource['amount'] }) try: res_specs = SpecificationResource.objects.select_related( 'resource').filter(specification=specification) for res_spec in res_specs: res = res_spec.resource specification.resources = res_specs except SpecificationResource.DoesNotExist: raise Resources.ResourceDoesNotExist() except DatabaseError as ex: logger.error(f"Specification edit error. | {cls.__name__}", exc_info=True) raise cls.EditError() return specification
def get(self, request, *args, **kwargs): return Response(data={'count': Resources.expired_count()}, status=status.HTTP_200_OK)
def get_queryset(self): try: return Resources.providers() except Resources.QueryError: logger.warning(f"Query error | ProviderListView") raise QueryError()
def get_queryset(self): try: return Resources.list() except Resources.QueryError: logger.warning(f"Query error | ResourceListView") raise QueryError()