3 # Copyright 2007 Google Inc.
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
20 from google
.net
.proto
import ProtocolBuffer
22 import dummy_thread
as thread
24 __pychecker__
= """maxreturns=0 maxbranches=0 no-callinit
25 unusednames=printElemNumber,debug_strs no-special"""
27 if hasattr(ProtocolBuffer
, 'ExtendableProtocolMessage'):
28 _extension_runtime
= True
29 _ExtendableProtocolMessage
= ProtocolBuffer
.ExtendableProtocolMessage
31 _extension_runtime
= False
32 _ExtendableProtocolMessage
= ProtocolBuffer
.ProtocolMessage
34 from google
.appengine
.api
.api_base_pb
import *
35 import google
.appengine
.api
.api_base_pb
36 class MailServiceError(ProtocolBuffer
.ProtocolMessage
):
42 UNAUTHORIZED_SENDER
= 3
43 INVALID_ATTACHMENT_TYPE
= 4
44 INVALID_HEADER_NAME
= 5
45 INVALID_CONTENT_ID
= 6
51 3: "UNAUTHORIZED_SENDER",
52 4: "INVALID_ATTACHMENT_TYPE",
53 5: "INVALID_HEADER_NAME",
54 6: "INVALID_CONTENT_ID",
57 def ErrorCode_Name(cls
, x
): return cls
._ErrorCode
_NAMES
.get(x
, "")
58 ErrorCode_Name
= classmethod(ErrorCode_Name
)
61 def __init__(self
, contents
=None):
63 if contents
is not None: self
.MergeFromString(contents
)
66 def MergeFrom(self
, x
):
70 if x
is self
: return 1
73 def IsInitialized(self
, debug_strs
=None):
81 def ByteSizePartial(self
):
88 def OutputUnchecked(self
, out
):
91 def OutputPartial(self
, out
):
94 def TryMerge(self
, d
):
99 if (tt
== 0): raise ProtocolBuffer
.ProtocolBufferDecodeError
103 def __str__(self
, prefix
="", printElemNumber
=0):
108 def _BuildTagLookupTable(sparse
, maxtag
, default
=None):
109 return tuple([sparse
.get(i
, default
) for i
in xrange(0, 1+maxtag
)])
112 _TEXT
= _BuildTagLookupTable({
116 _TYPES
= _BuildTagLookupTable({
117 0: ProtocolBuffer
.Encoder
.NUMERIC
,
118 }, 0, ProtocolBuffer
.Encoder
.MAX_TYPE
)
122 _STYLE_CONTENT_TYPE
= """"""
123 _PROTO_DESCRIPTOR_NAME
= 'apphosting.MailServiceError'
124 class MailAttachment(ProtocolBuffer
.ProtocolMessage
):
132 def __init__(self
, contents
=None):
133 if contents
is not None: self
.MergeFromString(contents
)
135 def filename(self
): return self
.filename_
137 def set_filename(self
, x
):
138 self
.has_filename_
= 1
141 def clear_filename(self
):
142 if self
.has_filename_
:
143 self
.has_filename_
= 0
146 def has_filename(self
): return self
.has_filename_
148 def data(self
): return self
.data_
150 def set_data(self
, x
):
154 def clear_data(self
):
159 def has_data(self
): return self
.has_data_
161 def contentid(self
): return self
.contentid_
163 def set_contentid(self
, x
):
164 self
.has_contentid_
= 1
167 def clear_contentid(self
):
168 if self
.has_contentid_
:
169 self
.has_contentid_
= 0
172 def has_contentid(self
): return self
.has_contentid_
175 def MergeFrom(self
, x
):
177 if (x
.has_filename()): self
.set_filename(x
.filename())
178 if (x
.has_data()): self
.set_data(x
.data())
179 if (x
.has_contentid()): self
.set_contentid(x
.contentid())
182 if x
is self
: return 1
183 if self
.has_filename_
!= x
.has_filename_
: return 0
184 if self
.has_filename_
and self
.filename_
!= x
.filename_
: return 0
185 if self
.has_data_
!= x
.has_data_
: return 0
186 if self
.has_data_
and self
.data_
!= x
.data_
: return 0
187 if self
.has_contentid_
!= x
.has_contentid_
: return 0
188 if self
.has_contentid_
and self
.contentid_
!= x
.contentid_
: return 0
191 def IsInitialized(self
, debug_strs
=None):
193 if (not self
.has_filename_
):
195 if debug_strs
is not None:
196 debug_strs
.append('Required field: filename not set.')
197 if (not self
.has_data_
):
199 if debug_strs
is not None:
200 debug_strs
.append('Required field: data not set.')
205 n
+= self
.lengthString(len(self
.filename_
))
206 n
+= self
.lengthString(len(self
.data_
))
207 if (self
.has_contentid_
): n
+= 1 + self
.lengthString(len(self
.contentid_
))
210 def ByteSizePartial(self
):
212 if (self
.has_filename_
):
214 n
+= self
.lengthString(len(self
.filename_
))
217 n
+= self
.lengthString(len(self
.data_
))
218 if (self
.has_contentid_
): n
+= 1 + self
.lengthString(len(self
.contentid_
))
222 self
.clear_filename()
224 self
.clear_contentid()
226 def OutputUnchecked(self
, out
):
228 out
.putPrefixedString(self
.filename_
)
230 out
.putPrefixedString(self
.data_
)
231 if (self
.has_contentid_
):
233 out
.putPrefixedString(self
.contentid_
)
235 def OutputPartial(self
, out
):
236 if (self
.has_filename_
):
238 out
.putPrefixedString(self
.filename_
)
241 out
.putPrefixedString(self
.data_
)
242 if (self
.has_contentid_
):
244 out
.putPrefixedString(self
.contentid_
)
246 def TryMerge(self
, d
):
250 self
.set_filename(d
.getPrefixedString())
253 self
.set_data(d
.getPrefixedString())
256 self
.set_contentid(d
.getPrefixedString())
260 if (tt
== 0): raise ProtocolBuffer
.ProtocolBufferDecodeError
264 def __str__(self
, prefix
="", printElemNumber
=0):
266 if self
.has_filename_
: res
+=prefix
+("FileName: %s\n" % self
.DebugFormatString(self
.filename_
))
267 if self
.has_data_
: res
+=prefix
+("Data: %s\n" % self
.DebugFormatString(self
.data_
))
268 if self
.has_contentid_
: res
+=prefix
+("ContentID: %s\n" % self
.DebugFormatString(self
.contentid_
))
272 def _BuildTagLookupTable(sparse
, maxtag
, default
=None):
273 return tuple([sparse
.get(i
, default
) for i
in xrange(0, 1+maxtag
)])
279 _TEXT
= _BuildTagLookupTable({
286 _TYPES
= _BuildTagLookupTable({
287 0: ProtocolBuffer
.Encoder
.NUMERIC
,
288 1: ProtocolBuffer
.Encoder
.STRING
,
289 2: ProtocolBuffer
.Encoder
.STRING
,
290 3: ProtocolBuffer
.Encoder
.STRING
,
291 }, 3, ProtocolBuffer
.Encoder
.MAX_TYPE
)
295 _STYLE_CONTENT_TYPE
= """"""
296 _PROTO_DESCRIPTOR_NAME
= 'apphosting.MailAttachment'
297 class MailHeader(ProtocolBuffer
.ProtocolMessage
):
303 def __init__(self
, contents
=None):
304 if contents
is not None: self
.MergeFromString(contents
)
306 def name(self
): return self
.name_
308 def set_name(self
, x
):
312 def clear_name(self
):
317 def has_name(self
): return self
.has_name_
319 def value(self
): return self
.value_
321 def set_value(self
, x
):
325 def clear_value(self
):
330 def has_value(self
): return self
.has_value_
333 def MergeFrom(self
, x
):
335 if (x
.has_name()): self
.set_name(x
.name())
336 if (x
.has_value()): self
.set_value(x
.value())
339 if x
is self
: return 1
340 if self
.has_name_
!= x
.has_name_
: return 0
341 if self
.has_name_
and self
.name_
!= x
.name_
: return 0
342 if self
.has_value_
!= x
.has_value_
: return 0
343 if self
.has_value_
and self
.value_
!= x
.value_
: return 0
346 def IsInitialized(self
, debug_strs
=None):
348 if (not self
.has_name_
):
350 if debug_strs
is not None:
351 debug_strs
.append('Required field: name not set.')
352 if (not self
.has_value_
):
354 if debug_strs
is not None:
355 debug_strs
.append('Required field: value not set.')
360 n
+= self
.lengthString(len(self
.name_
))
361 n
+= self
.lengthString(len(self
.value_
))
364 def ByteSizePartial(self
):
368 n
+= self
.lengthString(len(self
.name_
))
369 if (self
.has_value_
):
371 n
+= self
.lengthString(len(self
.value_
))
378 def OutputUnchecked(self
, out
):
380 out
.putPrefixedString(self
.name_
)
382 out
.putPrefixedString(self
.value_
)
384 def OutputPartial(self
, out
):
387 out
.putPrefixedString(self
.name_
)
388 if (self
.has_value_
):
390 out
.putPrefixedString(self
.value_
)
392 def TryMerge(self
, d
):
396 self
.set_name(d
.getPrefixedString())
399 self
.set_value(d
.getPrefixedString())
403 if (tt
== 0): raise ProtocolBuffer
.ProtocolBufferDecodeError
407 def __str__(self
, prefix
="", printElemNumber
=0):
409 if self
.has_name_
: res
+=prefix
+("name: %s\n" % self
.DebugFormatString(self
.name_
))
410 if self
.has_value_
: res
+=prefix
+("value: %s\n" % self
.DebugFormatString(self
.value_
))
414 def _BuildTagLookupTable(sparse
, maxtag
, default
=None):
415 return tuple([sparse
.get(i
, default
) for i
in xrange(0, 1+maxtag
)])
420 _TEXT
= _BuildTagLookupTable({
426 _TYPES
= _BuildTagLookupTable({
427 0: ProtocolBuffer
.Encoder
.NUMERIC
,
428 1: ProtocolBuffer
.Encoder
.STRING
,
429 2: ProtocolBuffer
.Encoder
.STRING
,
430 }, 2, ProtocolBuffer
.Encoder
.MAX_TYPE
)
434 _STYLE_CONTENT_TYPE
= """"""
435 _PROTO_DESCRIPTOR_NAME
= 'apphosting.MailHeader'
436 class MailMessage(ProtocolBuffer
.ProtocolMessage
):
448 def __init__(self
, contents
=None):
452 self
.attachment_
= []
454 if contents
is not None: self
.MergeFromString(contents
)
456 def sender(self
): return self
.sender_
458 def set_sender(self
, x
):
462 def clear_sender(self
):
467 def has_sender(self
): return self
.has_sender_
469 def replyto(self
): return self
.replyto_
471 def set_replyto(self
, x
):
472 self
.has_replyto_
= 1
475 def clear_replyto(self
):
476 if self
.has_replyto_
:
477 self
.has_replyto_
= 0
480 def has_replyto(self
): return self
.has_replyto_
482 def to_size(self
): return len(self
.to_
)
483 def to_list(self
): return self
.to_
488 def set_to(self
, i
, x
):
497 def cc_size(self
): return len(self
.cc_
)
498 def cc_list(self
): return self
.cc_
503 def set_cc(self
, i
, x
):
512 def bcc_size(self
): return len(self
.bcc_
)
513 def bcc_list(self
): return self
.bcc_
518 def set_bcc(self
, i
, x
):
521 def add_bcc(self
, x
):
527 def subject(self
): return self
.subject_
529 def set_subject(self
, x
):
530 self
.has_subject_
= 1
533 def clear_subject(self
):
534 if self
.has_subject_
:
535 self
.has_subject_
= 0
538 def has_subject(self
): return self
.has_subject_
540 def textbody(self
): return self
.textbody_
542 def set_textbody(self
, x
):
543 self
.has_textbody_
= 1
546 def clear_textbody(self
):
547 if self
.has_textbody_
:
548 self
.has_textbody_
= 0
551 def has_textbody(self
): return self
.has_textbody_
553 def htmlbody(self
): return self
.htmlbody_
555 def set_htmlbody(self
, x
):
556 self
.has_htmlbody_
= 1
559 def clear_htmlbody(self
):
560 if self
.has_htmlbody_
:
561 self
.has_htmlbody_
= 0
564 def has_htmlbody(self
): return self
.has_htmlbody_
566 def attachment_size(self
): return len(self
.attachment_
)
567 def attachment_list(self
): return self
.attachment_
569 def attachment(self
, i
):
570 return self
.attachment_
[i
]
572 def mutable_attachment(self
, i
):
573 return self
.attachment_
[i
]
575 def add_attachment(self
):
577 self
.attachment_
.append(x
)
580 def clear_attachment(self
):
581 self
.attachment_
= []
582 def header_size(self
): return len(self
.header_
)
583 def header_list(self
): return self
.header_
586 return self
.header_
[i
]
588 def mutable_header(self
, i
):
589 return self
.header_
[i
]
591 def add_header(self
):
593 self
.header_
.append(x
)
596 def clear_header(self
):
599 def MergeFrom(self
, x
):
601 if (x
.has_sender()): self
.set_sender(x
.sender())
602 if (x
.has_replyto()): self
.set_replyto(x
.replyto())
603 for i
in xrange(x
.to_size()): self
.add_to(x
.to(i
))
604 for i
in xrange(x
.cc_size()): self
.add_cc(x
.cc(i
))
605 for i
in xrange(x
.bcc_size()): self
.add_bcc(x
.bcc(i
))
606 if (x
.has_subject()): self
.set_subject(x
.subject())
607 if (x
.has_textbody()): self
.set_textbody(x
.textbody())
608 if (x
.has_htmlbody()): self
.set_htmlbody(x
.htmlbody())
609 for i
in xrange(x
.attachment_size()): self
.add_attachment().CopyFrom(x
.attachment(i
))
610 for i
in xrange(x
.header_size()): self
.add_header().CopyFrom(x
.header(i
))
613 if x
is self
: return 1
614 if self
.has_sender_
!= x
.has_sender_
: return 0
615 if self
.has_sender_
and self
.sender_
!= x
.sender_
: return 0
616 if self
.has_replyto_
!= x
.has_replyto_
: return 0
617 if self
.has_replyto_
and self
.replyto_
!= x
.replyto_
: return 0
618 if len(self
.to_
) != len(x
.to_
): return 0
619 for e1
, e2
in zip(self
.to_
, x
.to_
):
620 if e1
!= e2
: return 0
621 if len(self
.cc_
) != len(x
.cc_
): return 0
622 for e1
, e2
in zip(self
.cc_
, x
.cc_
):
623 if e1
!= e2
: return 0
624 if len(self
.bcc_
) != len(x
.bcc_
): return 0
625 for e1
, e2
in zip(self
.bcc_
, x
.bcc_
):
626 if e1
!= e2
: return 0
627 if self
.has_subject_
!= x
.has_subject_
: return 0
628 if self
.has_subject_
and self
.subject_
!= x
.subject_
: return 0
629 if self
.has_textbody_
!= x
.has_textbody_
: return 0
630 if self
.has_textbody_
and self
.textbody_
!= x
.textbody_
: return 0
631 if self
.has_htmlbody_
!= x
.has_htmlbody_
: return 0
632 if self
.has_htmlbody_
and self
.htmlbody_
!= x
.htmlbody_
: return 0
633 if len(self
.attachment_
) != len(x
.attachment_
): return 0
634 for e1
, e2
in zip(self
.attachment_
, x
.attachment_
):
635 if e1
!= e2
: return 0
636 if len(self
.header_
) != len(x
.header_
): return 0
637 for e1
, e2
in zip(self
.header_
, x
.header_
):
638 if e1
!= e2
: return 0
641 def IsInitialized(self
, debug_strs
=None):
643 if (not self
.has_sender_
):
645 if debug_strs
is not None:
646 debug_strs
.append('Required field: sender not set.')
647 if (not self
.has_subject_
):
649 if debug_strs
is not None:
650 debug_strs
.append('Required field: subject not set.')
651 for p
in self
.attachment_
:
652 if not p
.IsInitialized(debug_strs
): initialized
=0
653 for p
in self
.header_
:
654 if not p
.IsInitialized(debug_strs
): initialized
=0
659 n
+= self
.lengthString(len(self
.sender_
))
660 if (self
.has_replyto_
): n
+= 1 + self
.lengthString(len(self
.replyto_
))
661 n
+= 1 * len(self
.to_
)
662 for i
in xrange(len(self
.to_
)): n
+= self
.lengthString(len(self
.to_
[i
]))
663 n
+= 1 * len(self
.cc_
)
664 for i
in xrange(len(self
.cc_
)): n
+= self
.lengthString(len(self
.cc_
[i
]))
665 n
+= 1 * len(self
.bcc_
)
666 for i
in xrange(len(self
.bcc_
)): n
+= self
.lengthString(len(self
.bcc_
[i
]))
667 n
+= self
.lengthString(len(self
.subject_
))
668 if (self
.has_textbody_
): n
+= 1 + self
.lengthString(len(self
.textbody_
))
669 if (self
.has_htmlbody_
): n
+= 1 + self
.lengthString(len(self
.htmlbody_
))
670 n
+= 1 * len(self
.attachment_
)
671 for i
in xrange(len(self
.attachment_
)): n
+= self
.lengthString(self
.attachment_
[i
].ByteSize())
672 n
+= 1 * len(self
.header_
)
673 for i
in xrange(len(self
.header_
)): n
+= self
.lengthString(self
.header_
[i
].ByteSize())
676 def ByteSizePartial(self
):
678 if (self
.has_sender_
):
680 n
+= self
.lengthString(len(self
.sender_
))
681 if (self
.has_replyto_
): n
+= 1 + self
.lengthString(len(self
.replyto_
))
682 n
+= 1 * len(self
.to_
)
683 for i
in xrange(len(self
.to_
)): n
+= self
.lengthString(len(self
.to_
[i
]))
684 n
+= 1 * len(self
.cc_
)
685 for i
in xrange(len(self
.cc_
)): n
+= self
.lengthString(len(self
.cc_
[i
]))
686 n
+= 1 * len(self
.bcc_
)
687 for i
in xrange(len(self
.bcc_
)): n
+= self
.lengthString(len(self
.bcc_
[i
]))
688 if (self
.has_subject_
):
690 n
+= self
.lengthString(len(self
.subject_
))
691 if (self
.has_textbody_
): n
+= 1 + self
.lengthString(len(self
.textbody_
))
692 if (self
.has_htmlbody_
): n
+= 1 + self
.lengthString(len(self
.htmlbody_
))
693 n
+= 1 * len(self
.attachment_
)
694 for i
in xrange(len(self
.attachment_
)): n
+= self
.lengthString(self
.attachment_
[i
].ByteSizePartial())
695 n
+= 1 * len(self
.header_
)
696 for i
in xrange(len(self
.header_
)): n
+= self
.lengthString(self
.header_
[i
].ByteSizePartial())
706 self
.clear_textbody()
707 self
.clear_htmlbody()
708 self
.clear_attachment()
711 def OutputUnchecked(self
, out
):
713 out
.putPrefixedString(self
.sender_
)
714 if (self
.has_replyto_
):
716 out
.putPrefixedString(self
.replyto_
)
717 for i
in xrange(len(self
.to_
)):
719 out
.putPrefixedString(self
.to_
[i
])
720 for i
in xrange(len(self
.cc_
)):
722 out
.putPrefixedString(self
.cc_
[i
])
723 for i
in xrange(len(self
.bcc_
)):
725 out
.putPrefixedString(self
.bcc_
[i
])
727 out
.putPrefixedString(self
.subject_
)
728 if (self
.has_textbody_
):
730 out
.putPrefixedString(self
.textbody_
)
731 if (self
.has_htmlbody_
):
733 out
.putPrefixedString(self
.htmlbody_
)
734 for i
in xrange(len(self
.attachment_
)):
736 out
.putVarInt32(self
.attachment_
[i
].ByteSize())
737 self
.attachment_
[i
].OutputUnchecked(out
)
738 for i
in xrange(len(self
.header_
)):
740 out
.putVarInt32(self
.header_
[i
].ByteSize())
741 self
.header_
[i
].OutputUnchecked(out
)
743 def OutputPartial(self
, out
):
744 if (self
.has_sender_
):
746 out
.putPrefixedString(self
.sender_
)
747 if (self
.has_replyto_
):
749 out
.putPrefixedString(self
.replyto_
)
750 for i
in xrange(len(self
.to_
)):
752 out
.putPrefixedString(self
.to_
[i
])
753 for i
in xrange(len(self
.cc_
)):
755 out
.putPrefixedString(self
.cc_
[i
])
756 for i
in xrange(len(self
.bcc_
)):
758 out
.putPrefixedString(self
.bcc_
[i
])
759 if (self
.has_subject_
):
761 out
.putPrefixedString(self
.subject_
)
762 if (self
.has_textbody_
):
764 out
.putPrefixedString(self
.textbody_
)
765 if (self
.has_htmlbody_
):
767 out
.putPrefixedString(self
.htmlbody_
)
768 for i
in xrange(len(self
.attachment_
)):
770 out
.putVarInt32(self
.attachment_
[i
].ByteSizePartial())
771 self
.attachment_
[i
].OutputPartial(out
)
772 for i
in xrange(len(self
.header_
)):
774 out
.putVarInt32(self
.header_
[i
].ByteSizePartial())
775 self
.header_
[i
].OutputPartial(out
)
777 def TryMerge(self
, d
):
781 self
.set_sender(d
.getPrefixedString())
784 self
.set_replyto(d
.getPrefixedString())
787 self
.add_to(d
.getPrefixedString())
790 self
.add_cc(d
.getPrefixedString())
793 self
.add_bcc(d
.getPrefixedString())
796 self
.set_subject(d
.getPrefixedString())
799 self
.set_textbody(d
.getPrefixedString())
802 self
.set_htmlbody(d
.getPrefixedString())
805 length
= d
.getVarInt32()
806 tmp
= ProtocolBuffer
.Decoder(d
.buffer(), d
.pos(), d
.pos() + length
)
808 self
.add_attachment().TryMerge(tmp
)
811 length
= d
.getVarInt32()
812 tmp
= ProtocolBuffer
.Decoder(d
.buffer(), d
.pos(), d
.pos() + length
)
814 self
.add_header().TryMerge(tmp
)
818 if (tt
== 0): raise ProtocolBuffer
.ProtocolBufferDecodeError
822 def __str__(self
, prefix
="", printElemNumber
=0):
824 if self
.has_sender_
: res
+=prefix
+("Sender: %s\n" % self
.DebugFormatString(self
.sender_
))
825 if self
.has_replyto_
: res
+=prefix
+("ReplyTo: %s\n" % self
.DebugFormatString(self
.replyto_
))
829 if printElemNumber
: elm
="(%d)" % cnt
830 res
+=prefix
+("To%s: %s\n" % (elm
, self
.DebugFormatString(e
)))
835 if printElemNumber
: elm
="(%d)" % cnt
836 res
+=prefix
+("Cc%s: %s\n" % (elm
, self
.DebugFormatString(e
)))
841 if printElemNumber
: elm
="(%d)" % cnt
842 res
+=prefix
+("Bcc%s: %s\n" % (elm
, self
.DebugFormatString(e
)))
844 if self
.has_subject_
: res
+=prefix
+("Subject: %s\n" % self
.DebugFormatString(self
.subject_
))
845 if self
.has_textbody_
: res
+=prefix
+("TextBody: %s\n" % self
.DebugFormatString(self
.textbody_
))
846 if self
.has_htmlbody_
: res
+=prefix
+("HtmlBody: %s\n" % self
.DebugFormatString(self
.htmlbody_
))
848 for e
in self
.attachment_
:
850 if printElemNumber
: elm
="(%d)" % cnt
851 res
+=prefix
+("Attachment%s <\n" % elm
)
852 res
+=e
.__str
__(prefix
+ " ", printElemNumber
)
856 for e
in self
.header_
:
858 if printElemNumber
: elm
="(%d)" % cnt
859 res
+=prefix
+("Header%s <\n" % elm
)
860 res
+=e
.__str
__(prefix
+ " ", printElemNumber
)
866 def _BuildTagLookupTable(sparse
, maxtag
, default
=None):
867 return tuple([sparse
.get(i
, default
) for i
in xrange(0, 1+maxtag
)])
880 _TEXT
= _BuildTagLookupTable({
894 _TYPES
= _BuildTagLookupTable({
895 0: ProtocolBuffer
.Encoder
.NUMERIC
,
896 1: ProtocolBuffer
.Encoder
.STRING
,
897 2: ProtocolBuffer
.Encoder
.STRING
,
898 3: ProtocolBuffer
.Encoder
.STRING
,
899 4: ProtocolBuffer
.Encoder
.STRING
,
900 5: ProtocolBuffer
.Encoder
.STRING
,
901 6: ProtocolBuffer
.Encoder
.STRING
,
902 7: ProtocolBuffer
.Encoder
.STRING
,
903 8: ProtocolBuffer
.Encoder
.STRING
,
904 9: ProtocolBuffer
.Encoder
.STRING
,
905 10: ProtocolBuffer
.Encoder
.STRING
,
906 }, 10, ProtocolBuffer
.Encoder
.MAX_TYPE
)
910 _STYLE_CONTENT_TYPE
= """"""
911 _PROTO_DESCRIPTOR_NAME
= 'apphosting.MailMessage'
912 if _extension_runtime
:
915 __all__
= ['MailServiceError','MailAttachment','MailHeader','MailMessage']