Ejemplo n.º 1
0
    def triple_search(data: dict, first_search: list, second_search: list,
                      third_search: list):
        """
        Function that generates 3 new fields for dict data which can be later used for diff priority searches.
        :param data: Dictionary that has all your information and want to generate searches in
        :param first_search: List of top priority fields
        :param second_search: List of second priority fields
        :param third_search: All the other fields you want to search by
        :return: Dictionary data with first_search,second_search and third_search added in it
        """
        def prepare_search(*args):
            list_return = []
            for obj in args:
                if isinstance(obj, list):
                    list_return += obj
                elif isinstance(obj, dict):
                    list_return += obj.values()
                else:
                    list_return.append(obj)
            text = " ".join(set(filter(None, list_return)))
            return text.lower()

        searches = {
            "first_search": first_search,
            "second_search": second_search,
            "third_search": third_search
        }
        for key, values in searches.items():
            fields = []
            for item in values:
                fields.append(prepare_search(gt(data, item)))
            search = {key: prepare_search(fields)}
            data.update(search)
Ejemplo n.º 2
0
 def test_gt(self):
     data = {"a": {"b": 1, "c": [{"d": 2}, {"d": 3}]}}
     self.assertEqual(utils.gt(data, 'a.b'), 1)
     self.assertEqual(utils.gt(data, 'a.c.0.d'), 2)
     self.assertIsNone(utils.gt(data, 'a.b.c'))
     self.assertEqual(utils.gt(data, 'a.c.*.d'), [2, 3])
Ejemplo n.º 3
0
import random
from abc import ABC

from django.conf import settings
from django.contrib.auth import get_user_model
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APIClient

from drf_util.utils import get_applications, Colors, gt

fixtures_path = gt(settings, 'FIXTURES_PATH', 'apps/fixtures')


class CustomClient(APIClient):
    default_status_codes = {
        'GET': status.HTTP_200_OK,
        'POST': status.HTTP_201_CREATED,
        'DELETE': status.HTTP_204_NO_CONTENT
    }

    def request(self, **request):
        assert_status_code = request.pop(
            'assert_status_code', self.default_status_codes.get(request.get('REQUEST_METHOD'), 200)
        )

        print(f"{Colors.BOLD}{Colors.WARNING} {request.get('REQUEST_METHOD')}:{Colors.END} {request.get('PATH_INFO')}")
        response = super().request(**request)
        assert response.status_code == assert_status_code, (
            response.json() if response.status_code != status.HTTP_500_INTERNAL_SERVER_ERROR else response.status_code
        )