Анимация
JavaScript
|
Главная Библионтека 28.3 HimeWriter - средства для записи в формате MIME Этот модуль определяет класс HimeWriter, реализующий запись сообщений, состоящих из нескольких частей, в MIME-формате: copybinary( input, output) Считывает блоки двоичных данных из потока input (до конца файла) и записывает их в поток output. В текущих реализациях размер блоков фиксирован и равен 8192 байт. Экземпляры класса Message помимо унаследованных от rfc822.Hessage имеют следующие методы: getplist() Возвращает список параметров (строк) из заголовка content-type . Для параметров вида name=value имя name преобразуется к нижнему регистру. Например, если сообщение содержит заголовок Content-type: text/html; spam=1; Spam=2; Spam, метод getplist() вернет список [spam=1, spam=2, Spam] . getparam( name) Возвращает значение (value) первого параметра вида name=value с указанным именем (сопоставление производится без учета регистра букв) из заголовка content-type . Если значение помещено в двойные кавычки " value" или угловые скобки <value> , то они удаляются. getencoding() Возвращает строку с кодировкой сообщения, указанного в заголовке content-transfer-encoding . Если сообщение не содержит такого заголовка, возвращает 7bit. Буквы в возвращаемой строке приводятся к нижнему регистру. gettype() Возвращает тип содержимого сообщения в виде строки основной тип/подтип , указанный в заголовке content-type. Если сообщение не содержит такого заголовка, возвращает text/plain. Буквы в возвращаемой строке приведены к нижнему регистру. getmaintype() Возвращает строку с основным типом содержимого сообщения, указанного в заголовке content-type. Если сообщение не содержит такого заголовка, возвращает text. Буквы в возвращаемой строке приведены к нижнему регистру. getsubtype() Возвращает строку с подтипом содержимого сообщения, указанного в заголовке content-type. Если сообщение не содержит такого заголовка, возвращает plain. Буквы в возвращаемой строке приведены к нижнему регистру. 28.3. MimeWriter - средства для записи в формате MIME 375 MimeWriter( fp) Экземпляры этого класса реализуют запись в MIME-формате в поток fp (файловый или подобный объект). Экземпляры класса MimeWriter имеют следующие методы: addheader( name, value [, prefix]) Добавляет к сообщению заголовок name со значением value. Необязательный аргумент prefix указывает место, в которое заголовок будет добавлен: 0 (используется по умолчанию) - добавить в коней, 1 - вставить в начало. flushheaders() При вызове этого метода все накопленные (с помощью метода addheader() ) заголовки записываются в поток и забываются. Такая операция может быть полезна, если Вы не собираетесь записывать основную часть (тело) сообщения, например, для блоков типа message/rfc822, которые иногда используется для представления информации, аналогичной заголовкам. startbody( ctype [, plist [, prefix]]) Возвращает объект, аналогичный файловому, который может быть использован для записи основной части (тела) сообщения. Аргумент ctype указывает значение, которое будет использоваться в заголовке content-type (тип данных). Если задан аргумент plist, он должен быть списком пар вида (name, value), которые будут использованы в качестве дополнительных параметров в заголовке content-type . Назначение аргумента prefix такое же, как и для метода addheader() , но по умолчанию он равен 0 (добавить в начало). startmultipartbody( subtype [, boundary [, plist [, prefix]]]) Возвращает объект, аналогичный файловому, который может быть использован для записи тела сообщения, состоящего из нескольких частей. Аргумент указывает подтип сообщения типа multipart , boundary может быть использован для указания дружественного разделителя частей (по умолчанию используется mimetools.choose boundary()), список plist задает дополнительные параметры заголовка content-type . Аргумент prefix имеет такое же значение, как и для метода startbody() . Подчасти должны создаваться с помощью метода nextpart() . nextpart() Возвращает новый экземпляр класса MimeWriter, представляющий часть в сообщении типа multipart/*. Этот объект может быть использован, в том числе, и для вложенных сообщений, состоящих из нескольких частей. Перед использованием метода nextpart() должен быть вызван метод startmultipartbody() . lastpart() Это метод всегда должен быть использован после записи сообщений, состоящих из нескольких частей (типа multipart/*). Этот модуль определяет класс HultiFile, позволяющий читать текст, состоящий из нескольких частей: метод readline() его экземпляров возвращает пустую строку при достижении заданного разделителя. Исходная реализация класса рассчитана на чтения сообщений в формате MIME, однако, переопределив методы в производном классе, Вы можете адаптировать его на общий случай. MultiFile( fp [, seekable]) Создает и возвращает объект, реализующий чтение частей текста. Аргумент fp должен быть файловым (или подобным) объектом, из которого будет производиться чтение исходного текста. На самом деле достаточно наличия у fp методов readline() , seek() и tell() . Последние два метода требуются для обеспечения произвольного доступа к частям текста. Если задан и является ложью аргумент seekable, методы seek() и tell() объекта fp использоваться не будут. Error Это исключение генерируется в случае возникновения характерных для модуля ошибок. С точки зрения реализации класса HultiFile исходный текст состоит из трех видов строк: данных, разделителей частей и метки конца. Этот класс приспособлен к обработке сообщений, части которых состоят из несколько вложенных частей. В каждом таком случае должен быть свой шаблон для разделительных строк и метки конца. Экземпляры класса HultiFile имеют следующие методы: push( str) Записывает в стек разделительную строку. Если эта строка, соответствующим образом выделенная, будет найдена во входном потоке, она будет интерпретирована как разделитель частей или метка конца. Все последующие попытки чтения из экземпляра класса HultiFile будут возвращать пустую строку до тех пор, пока разделительная строка не будет удалена из стека с помощью метода pop() или ее использование не будет повторно разрешено с помощью метода next() . Стек может содержать более одной разделительной строки - использоваться в качестве шаблона будет та, которая находится на вершине стека, то есть была записана последней (если в тексте попадется другая строка из стека, будет сгенерировано исключение Error). readline() Считывает и возвращает очередную строку из текущей части. При достижении разделителя частей или метки конца возвращает пустую строку. Если считываемая строка удовлетворяет другому разделителю в стеке или поток с исходным текстом выдает конец файла (при непустом стеке), генерирует исключение Error. 28.4 multifile - чтение сообщений, состоящих из нескольких частей 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 [ 119 ] 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |