def _update_sortkey(self): try: sortkey = int(self.new_value) if sortkey < 0 or sortkey > 32300: return say_no('New sortkey is out of range [0, 32300].') except ValueError: return say_no('New sortkey is not an integer.') plan = plan_from_request_or_none(self.request, pk_enough=True) if plan is None: return say_no('No plan record found.') update_targets = self.get_update_targets() # ## # MySQL does not allow to exeucte UPDATE statement that contains # subquery querying from same table. In this case, OperationError will # be raised. offset = 0 step_length = 500 queryset_filter = TestCasePlan.objects.filter data = {self.target_field: sortkey} while 1: sub_cases = update_targets[offset:offset + step_length] case_pks = [case.pk for case in sub_cases] if len(case_pks) == 0: break queryset_filter(plan=plan, case__in=case_pks).update(**data) # Move to next batch of cases to change. offset += step_length
def _update_case_status(self): exists = TestCaseStatus.objects.filter(pk=self.new_value).exists() if not exists: raise ObjectDoesNotExist('The status you choose does not exist.') self.get_update_targets().update(**{str(self.target_field): self.new_value}) # ### # Case is moved between Cases and Reviewing Cases tabs accoding to the # change of status. Meanwhile, the number of cases with each status # should be updated also. try: plan = plan_from_request_or_none(self.request) except Http404: return say_no("No plan record found.") else: if plan is None: return say_no('No plan record found.') confirm_status_name = 'CONFIRMED' plan.run_case = plan.case.filter(case_status__name=confirm_status_name) plan.review_case = plan.case.exclude(case_status__name=confirm_status_name) run_case_count = plan.run_case.count() case_count = plan.case.count() # FIXME: why not calculate review_case_count or run_case_count by using # substraction, which saves one SQL query. review_case_count = plan.review_case.count() return http.JsonResponse({ 'rc': 0, 'response': 'ok', 'run_case_count': run_case_count, 'case_count': case_count, 'review_case_count': review_case_count, })
def _update_sortkey(self): try: sortkey = int(self.new_value) if sortkey < 0 or sortkey > 32300: return JsonResponseBadRequest( {'message': 'New sortkey is out of range [0, 32300].'}) except ValueError: return JsonResponseBadRequest( {'message': 'New sortkey is not an integer.'}) plan = plan_from_request_or_none(self.request, pk_enough=True) if plan is None: return JsonResponseBadRequest({'message': 'No plan record found.'}) update_targets = self.get_update_targets() # ## # MySQL does not allow to exeucte UPDATE statement that contains # subquery querying from same table. In this case, OperationError will # be raised. offset = 0 step_length = 500 queryset_filter = TestCasePlan.objects.filter data = {self.target_field: sortkey} while 1: sub_cases = update_targets[offset:offset + step_length] case_pks = [case.pk for case in sub_cases] if len(case_pks) == 0:
def _update_case_status(self): try: new_status = TestCaseStatus.objects.get(pk=self.new_value) except TestCaseStatus.DoesNotExist: raise ObjectDoesNotExist('The status you choose does not exist.') update_object = self.get_update_targets() if not update_object: return say_no('No record(s) found') for testcase in update_object: if hasattr(testcase, 'log_action'): testcase.log_action( who=self.request.user, action='Field %s changed from %s to %s.' % (self.target_field, testcase.case_status, new_status.name)) update_object.update(**{str(self.target_field): self.new_value}) # ### # Case is moved between Cases and Reviewing Cases tabs accoding to the # change of status. Meanwhile, the number of cases with each status # should be updated also. try: plan = plan_from_request_or_none(self.request) except Http404: return say_no("No plan record found.") else: if plan is None: return say_no('No plan record found.') confirm_status_name = 'CONFIRMED' plan.run_case = plan.case.filter(case_status__name=confirm_status_name) plan.review_case = plan.case.exclude( case_status__name=confirm_status_name) run_case_count = plan.run_case.count() case_count = plan.case.count() # FIXME: why not calculate review_case_count or run_case_count by using # substraction, which saves one SQL query. review_case_count = plan.review_case.count() return http.JsonResponse({ 'rc': 0, 'response': 'ok', 'run_case_count': run_case_count, 'case_count': case_count, 'review_case_count': review_case_count, })
def _update_sortkey(self): try: sortkey = int(self.new_value) if sortkey < 0 or sortkey > 32300: return say_no('New sortkey is out of range [0, 32300].') except ValueError: return say_no('New sortkey is not an integer.') plan = plan_from_request_or_none(self.request, pk_enough=True) if plan is None: return say_no('No plan record found.') update_targets = self.get_update_targets() # ## # MySQL does not allow to exeucte UPDATE statement that contains # subquery querying from same table. In this case, OperationError will # be raised. offset = 0 step_length = 500 while True: sub_cases = update_targets[offset:offset + step_length] case_pks = [case.pk for case in sub_cases] if not case_pks:
def _update_case_status(self): exists = TestCaseStatus.objects.filter(pk=self.new_value).exists() if not exists: raise ObjectDoesNotExist('The status you choose does not exist.') self.get_update_targets().update( **{str(self.target_field): self.new_value}) # ### # Case is moved between Cases and Reviewing Cases tabs accoding to the # change of status. Meanwhile, the number of cases with each status # should be updated also. try: plan = plan_from_request_or_none(self.request) except Http404: return say_no("No plan record found.") else: if plan is None: return say_no('No plan record found.') confirm_status_name = 'CONFIRMED' plan.run_case = plan.case.filter(case_status__name=confirm_status_name) plan.review_case = plan.case.exclude( case_status__name=confirm_status_name) run_case_count = plan.run_case.count() case_count = plan.case.count() # FIXME: why not calculate review_case_count or run_case_count by using # substraction, which saves one SQL query. review_case_count = plan.review_case.count() return HttpResponse( simplejson.dumps({ 'rc': 0, 'response': 'ok', 'run_case_count': run_case_count, 'case_count': case_count, 'review_case_count': review_case_count }) )
def get_plan(self, pk_enough=True): try: return plan_from_request_or_none(self.request, pk_enough) except Http404: return None
def get_plan(self, pk_enough=True): try: return plan_from_request_or_none(self.request, pk_enough) except Http404: return None