def test_json_extract_multiple(self): results = list( JSONModel.objects.annotate(x=JSONExtract( 'attrs', '$.int', '$.flote'), ).values_list('x', flat=True), ) assert results == [[88, 1.5]] assert isinstance(results[0][0], int) assert isinstance(results[0][1], float)
def test_json_extract_filter(self): results = list( JSONModel.objects.annotate(x=JSONExtract("attrs", "$.sub")).filter( x={"document": "store"} ) ) assert results == [self.obj]
def test_json_extract_kwarg_bad(self): with pytest.raises(TypeError) as excinfo: JSONExtract('foo', 'bar', foo=1) assert ( str(excinfo.value) == "__init__() got an unexpected keyword argument 'foo'" )
def test_json_extract_flote_as_float(self): results = list( JSONModel.objects.annotate(x=JSONExtract( "attrs", "$.flote", output_field=FloatField())).filter( x__gt=0.1).values_list("x", flat=True)) assert results == [1.5] assert isinstance(results[0], float)
def test_json_extract_flote_expression(self): results = list( JSONModel.objects.annotate( x=JSONExtract("attrs", Value("$.flote"))).values_list( "x", flat=True)) assert results == [1.5] assert isinstance(results[0], float)
def search_cloud_accounts(self, request, *args, **kwargs): query_params = request.query_params.dict() data_fields = ['id', 'customer__id', 'customer__company_name'] filters = dict() filters['active'] = True if 'vendor_short_name' in query_params: filters['type'] = query_params.pop('vendor_short_name') filters.update(query_params) queryset = self.get_queryset().filter( **filters).order_by('customer__company_name') if filters.get('type', None) == 'AWS': queryset = queryset \ .annotate(linked_account_id=JSONExtract('details', '$.account_id')) data_fields.append('linked_account_id') data = queryset.values(*data_fields) data = list(data) return Response(data=data, status=status.HTTP_200_OK)
def test_json_extract_multiple(self): results = list( JSONModel.objects.annotate( x=JSONExtract("attrs", "$.int", "$.flote")).values_list( "x", flat=True)) assert results == [[88, 1.5]] assert isinstance(results[0][0], int) assert isinstance(results[0][1], float)
def ordering(self, qs): query_dict = self._querydict if 'order[0][column]' not in query_dict: return qs sort_col = int(query_dict.get('order[0][column]')) sort_dir = query_dict.get('order[0][dir]') order_columns = self.get_order_columns() sortcol = order_columns[sort_col] sdir = '-' if sort_dir == 'desc' else '' if sortcol == 'id' or sortcol == 'uploaded_at': return qs.order_by('{0}{1}'.format(sdir, sortcol)) else: json_extract = JSONExtract('result', '$."{0}"'.format(sortcol)) if sort_dir == 'desc': json_extract = json_extract.desc() return qs.order_by(json_extract)
def prepare_scores_old(challenge_name: str): latest_round = Round.objects.filter(challenge_name=challenge_name, state='FINISHED').last() if latest_round: time_passed_from_last_run = convert_ms_to_minutes((time.time() - latest_round.updated.timestamp()) * 1000) latest_scores = Score.objects.filter(round_id=latest_round.id).order_by( JSONExtract('result', '$.run_result.duration').asc(nulls_last=True) ).all() else: time_passed_from_last_run = 0 latest_scores = [] return latest_scores, time_passed_from_last_run
def get(self, request): latest_run_score: Score = Score.objects.latest('run_id') run_id = latest_run_score.run_id time_passed_from_last_run = convert_ms_to_minutes((time.time() - run_id) * 1000) latest_scores = Score.objects.filter(run_id=run_id).order_by( JSONExtract('result', '$.run_result.duration').asc(nulls_last=True) ).all() return render(request, 'scores.html', {'scores': latest_scores, 'time_passed_from_last_run': time_passed_from_last_run})
def get(self, request): latest_round = Round.objects.filter(state='FINISHED').last() if latest_round: time_passed_from_last_run = convert_ms_to_minutes( (time.time() - latest_round.updated.timestamp()) * 1000) latest_scores = Score.objects.filter( round_id=latest_round.id).order_by( JSONExtract( 'result', '$.run_result.duration').asc(nulls_last=True)).all() else: time_passed_from_last_run = 0 latest_scores = [] return render( request, 'scores.html', { 'scores': latest_scores, 'time_passed_from_last_run': time_passed_from_last_run })
def test_json_extract_output_field_too_many_paths(self): with pytest.raises(TypeError) as excinfo: JSONExtract("foo", "bar", "baz", output_field=1) assert "output_field won't work with more than one path" in str(excinfo.value)
def test_json_extract_flote(self): results = list( JSONModel.objects.annotate( x=JSONExtract('attrs', '$.flote')).values_list('x', flat=True)) assert results == [1.5] assert isinstance(results[0], float)
def export_cloud_accounts(self, request, *args, **kwargs): query_params = request.query_params.dict() query_params['offset'] = 0 query_params['end'] = -1 export_type = kwargs.pop('export_type', 'csv') kwargs.update(query_params) queryset = self.list(request=request, *args, **kwargs, return_as='queryset') account_type = query_params.get('type', 'ALL') screen_name = 'Cloud Accounts' data_list = list() if account_type == 'AWS': screen_name = 'AWS Linked Accounts' data_list = queryset.annotate(payer_account_id=JSONExtract('details', '$.payer_account_id'), linked_account_id=JSONExtract('details', '$.account_id'), root_email=JSONExtract('details', '$.root_email'), iam_username=JSONExtract('details', '$.iam_username'), iam_password=JSONExtract('details', '$.iam_password'), iam_url=JSONExtract('details', '$.iam_url'), friendly_name=JSONExtract('details', '$.friendly_name'), delivery_sequence=JSONExtract('details', '$.delivery_sequence'), mrr=JSONExtract('details', '$.mrr'), workload=JSONExtract('details', '$.workload'), estimate_url=JSONExtract('details', '$.estimate_url'), reference_number=JSONExtract('details', '$.reference_number')) \ .values('customer__partner__company_name', 'customer__company_name', 'customer__id', 'active', 'payer_account_id', 'linked_account_id', 'root_email', 'iam_username', 'iam_password', 'iam_url', 'friendly_name', 'delivery_sequence', 'mrr', 'workload', 'estimate_url', 'reference_number') file_generator = ReportList() response = file_generator.export( data_list=data_list, screen_name=screen_name, export_type=export_type, report_name='customer_aws_accounts_list') return response