Архив для Декабрь, 2008

Twisted ПАиПП — Техника разработки

Введение

Сообщество разработчиков Twisted открыто ведет процесс разработки и документирует его. Это позволяет взглянуть на работу профессионалов и позаимствовать базу знаний.

Разработка через тестирование (Test driven development/TDD)

Twisted имеет модуль для тестирования кода(unit tests). Он называется Trial.

Посмотрев примеры кода самого twisted, мы наверняка найдем схожую с нашей задачей проблему, которая была решена ранее. Так мы можем найти примеры тестов для протоколов. Такие тесты используются в проекте FATS.

Немного о технике TDD:

  1. Мы создаем код теста и пишем в нем пустые методы для нашего кода.
  2. Нашего кода не существует! Мы ставим себе задачу для его реализации.
  3. Запускаем Trial. Видим что у нас все горит, — ничего не работает.
  4. Начинаем выполнять эти пункты! Таким образом мы сразу тестируем свой код и планируем работы.

Twisted ПАиПП — Практика в рабочих проектах

Постановка задачи

В качестве примера буду использовать два реализованных проекта:

  1. FATS — Быстрые телефонные сервисы на базе программной IP-PBX Asterisk
  2. DBSync — синхронизатор баз данных в режиме 24/7/365

В первую очередь важно понять необходимость использования Twisted. Как уже говорилось ранее: “есть множество способов решить задачу”.

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