Example #1
0
 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]
Example #3
0
 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'"
     )
Example #4
0
 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)
Example #6
0
    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)
Example #7
0
 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)
Example #8
0
    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
Example #10
0
    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})
Example #11
0
    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)
Example #13
0
 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)
Example #14
0
    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