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)
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])
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 )