Введение
Сообщество разработчиков Twisted открыто ведет процесс разработки и документирует его. Это позволяет взглянуть на работу профессионалов и позаимствовать базу знаний.
Разработка через тестирование (Test driven development/TDD)
Twisted имеет модуль для тестирования кода(unit tests).
Он называется Trial.
Посмотрев примеры кода самого twisted, мы наверняка найдем схожую
с нашей задачей проблему, которая была решена ранее. Так мы можем найти
примеры тестов для протоколов. Такие тесты используются в проекте FATS.
Немного о технике TDD:
-
Мы создаем код теста и пишем в нем пустые методы для нашего кода.
-
Нашего кода не существует! Мы ставим себе задачу для его реализации.
-
Запускаем Trial. Видим что у нас все горит, — ничего не работает.
-
Начинаем выполнять эти пункты! Таким образом мы сразу тестируем свой код и планируем работы.
Постановка задачи
В качестве примера буду использовать два реализованных проекта:
-
FATS — Быстрые телефонные сервисы на базе программной IP-PBX Asterisk
-
DBSync — синхронизатор баз данных в режиме 24/7/365
В первую очередь важно понять необходимость использования Twisted. Как уже говорилось ранее: “есть множество способов решить задачу”.
Deferred \ Callbacks \ Errbacks
Не блокирующий запрос web страницы:
from twisted.web.client import getPage
from twisted.internet import reactor
def lowerCaseContents(contents):
return contents.lower()
def printContents(contents):
print contents
reactor.stop()
deferred = getPage('http://twistedmatrix.com/')
# Добавляем два callback'а для запроса web страницы
# первый преобразует весь полученный текст к нижнему регистру
# второй распечатает ответ запроса в стандартный поток вывода
deferred.addCallback(lowerCaseContents)
deferred.addCallback(printContents)
reactor.run()