Тестовое задание

В этом репозитории представлены решения для следующих задач:

1. Проверка на корректность заполнения поля

Задача

Необходимо провести верификацию введенных пользователем данных. Проверяются ключи на предмет соответствия написания с определенными в list_keys значениями, а также наличие открывающих и закрывающих скобок.

Решение

Для решения этой задачи была написана функция verification, которая принимает текст и список ключей list_keys в качестве входных параметров. Функция проверяет наличие открывающих и закрывающих скобок, а также наличие ключей в тексте. Результаты проверки возвращаются в виде соответствующих сообщений.

2. Подсчет элементов

Задача

Необходимо сгруппировать элементы списка list_version по уникальности пар id и version.

Решение

Для решения этой задачи была написана функция count_elements, которая принимает список list_version в качестве входного параметра. Функция считает количество одинаковых пар id и version и возвращает список сгруппированных значений в формате [[id, version, count], ...], где count - количество одинаковых пар id и version.

Пример использования функции:

list_version = [['665587', 2], ['669532', 1], ['669537', 2], ['669532', 1], ['665587', 1]]

result = count_elements(list_version)
print(result)

3. Поиск разницы между двумя JSON

Задача

Необходимо найти различия между двумя JSON-объектами. Если различающиеся параметры входят в diff_list, необходимо вывести различие.

Решение

Для решения этой задачи была написана функция compare_json, которая принимает два JSON-объекта и список параметров diff_list. Функция сравнивает значения параметров в двух JSON-объектах и возвращает список словарей с информацией о различиях между JSON-объектами. Каждый словарь содержит ключ, старое значение и новое значение для параметра, который отличается в двух JSON-объектах.

Пример использования функции:

json = {'company_id': 111111, 'resource': 'record', ...}
json_old = {'company_id': 111111, 'resource': 'record', ...}
diff_list = ['services', 'staff', 'datetime']

result = compare_json(json1, json2, diff_list)
print(result)

4. Очистка БД

Задача

Предложите систему для очистки данных из MongoDB по истечению заданного времени.

Решение

Для решения этой задачи можно использовать TTL (Time to Live) индексы в MongoDB. TTL индексы позволяют автоматически удалять документы из коллекции по истечению заданного времени. Для использования такого индекса необходимо создать индекс на поле, отвечающее за время жизни документа, и указать время жизни в секундах. После истечения указанного времени, MongoDB удалит документ автоматически.

Пример использования TTL индекса:

# Создание TTL индекса на поле 'expiration_time' с временем жизни в 24 часа
collection.create_index("expiration_time", expireAfterSeconds=24*60*60)

# Вставка документа с полем 'expiration_time' равным текущему времени плюс 24 часа
document = { 'data': 'some data', 'expiration_time': datetime.now() + timedelta(days=1) }

5. Схема кода

Задача

Предложите архитектуру обработки входящих веб-хуков с использованием одного эндпоинта

Решение

При поступлении входящего веб-хука на эндпоинт "/Datalore", будет вызвана функция process_webhook, которая будет проверять поле 'function' в переданном JSON и выполнять соответствующие действия в зависимости от значения этого поля.