Vega strike Python Modules doc  0.5.1
Documentation of the " Modules " folder of Vega strike
 All Data Structures Namespaces Files Functions Variables
AddrlistClass Class Reference
Inheritance diagram for AddrlistClass:
AddressList

Public Member Functions

def __init__
 
def gotonext
 
def getaddrlist
 
def getaddress
 
def getrouteaddr
 
def getaddrspec
 
def getdomain
 
def getdelimited
 
def getquote
 
def getcomment
 
def getdomainliteral
 
def getatom
 
def getphraselist
 

Data Fields

 specials
 
 pos
 
 LWS
 
 CR
 
 atomends
 
 phraseends
 
 field
 
 commentlist
 

Detailed Description

Address parser class by Ben Escoto.

To understand what this class does, it helps to have a copy of
RFC 2822 in front of you.

http://www.faqs.org/rfcs/rfc2822.html

Note: this class interface is deprecated and may be removed in the future.
Use rfc822.AddressList instead.

Definition at line 505 of file rfc822.py.

Constructor & Destructor Documentation

def __init__ (   self,
  field 
)
Initialize a new instance.

`field' is an unparsed address header field, containing one or more
addresses.

Definition at line 517 of file rfc822.py.

518  def __init__(self, field):
519  """Initialize a new instance.
520 
521  `field' is an unparsed address header field, containing one or more
522  addresses.
523  """
524  self.specials = '()<>@,:;.\"[]'
525  self.pos = 0
526  self.LWS = ' \t'
527  self.CR = '\r\n'
528  self.atomends = self.specials + self.LWS + self.CR
529  # Note that RFC 2822 now specifies `.' as obs-phrase, meaning that it
530  # is obsolete syntax. RFC 2822 requires that we recognize obsolete
531  # syntax, so allow dots in phrases.
532  self.phraseends = self.atomends.replace('.', '')
533  self.field = field
534  self.commentlist = []

Member Function Documentation

def getaddress (   self)
Parse the next address.

Definition at line 558 of file rfc822.py.

References AddrlistClass.commentlist, AddrlistClass.field, AddrlistClass.getaddress(), AddrlistClass.getaddrspec(), AddrlistClass.getphraselist(), AddrlistClass.getrouteaddr(), AddrlistClass.gotonext(), dospath.join(), _Subfile.pos, MatchObject.pos, AddrlistClass.pos, and AddrlistClass.specials.

559  def getaddress(self):
560  """Parse the next address."""
561  self.commentlist = []
562  self.gotonext()
563 
564  oldpos = self.pos
565  oldcl = self.commentlist
566  plist = self.getphraselist()
567 
568  self.gotonext()
569  returnlist = []
570 
571  if self.pos >= len(self.field):
572  # Bad email address technically, no domain.
573  if plist:
574  returnlist = [(' '.join(self.commentlist), plist[0])]
575 
576  elif self.field[self.pos] in '.@':
577  # email address is just an addrspec
578  # this isn't very efficient since we start over
579  self.pos = oldpos
580  self.commentlist = oldcl
581  addrspec = self.getaddrspec()
582  returnlist = [(' '.join(self.commentlist), addrspec)]
583 
584  elif self.field[self.pos] == ':':
585  # address is a group
586  returnlist = []
587 
588  fieldlen = len(self.field)
589  self.pos = self.pos + 1
590  while self.pos < len(self.field):
591  self.gotonext()
592  if self.pos < fieldlen and self.field[self.pos] == ';':
593  self.pos = self.pos + 1
594  break
595  returnlist = returnlist + self.getaddress()
596 
597  elif self.field[self.pos] == '<':
598  # Address is a phrase then a route addr
599  routeaddr = self.getrouteaddr()
600 
601  if self.commentlist:
602  returnlist = [(' '.join(plist) + ' (' + \
603  ' '.join(self.commentlist) + ')', routeaddr)]
604  else: returnlist = [(' '.join(plist), routeaddr)]
605 
606  else:
607  if plist:
608  returnlist = [(' '.join(self.commentlist), plist[0])]
609  elif self.field[self.pos] in self.specials:
610  self.pos = self.pos + 1
611 
612  self.gotonext()
613  if self.pos < len(self.field) and self.field[self.pos] == ',':
614  self.pos = self.pos + 1
615  return returnlist
def getaddrlist (   self)
Parse all addresses.

Returns a list containing all of the addresses.

Definition at line 544 of file rfc822.py.

References AddrlistClass.getaddress().

545  def getaddrlist(self):
546  """Parse all addresses.
547 
548  Returns a list containing all of the addresses.
549  """
550  result = []
551  while 1:
552  ad = self.getaddress()
553  if ad:
554  result += ad
555  else:
556  break
557  return result
def getaddrspec (   self)
Parse an RFC 2822 addr-spec.

Definition at line 648 of file rfc822.py.

References AddrlistClass.atomends, AddrlistClass.field, AddrlistClass.getatom(), AddrlistClass.getdomain(), AddrlistClass.getquote(), AddrlistClass.gotonext(), dospath.join(), _Subfile.pos, MatchObject.pos, and AddrlistClass.pos.

649  def getaddrspec(self):
650  """Parse an RFC 2822 addr-spec."""
651  aslist = []
652 
653  self.gotonext()
654  while self.pos < len(self.field):
655  if self.field[self.pos] == '.':
656  aslist.append('.')
657  self.pos = self.pos + 1
658  elif self.field[self.pos] == '"':
659  aslist.append('"%s"' % self.getquote())
660  elif self.field[self.pos] in self.atomends:
661  break
662  else: aslist.append(self.getatom())
663  self.gotonext()
664 
665  if self.pos >= len(self.field) or self.field[self.pos] != '@':
666  return ''.join(aslist)
667 
668  aslist.append('@')
669  self.pos = self.pos + 1
670  self.gotonext()
671  return ''.join(aslist) + self.getdomain()
def getatom (   self,
  atomends = None 
)
Parse an RFC 2822 atom.

Optional atomends specifies a different set of end token delimiters
(the default is to use self.atomends).  This is used e.g. in
getphraselist() since phrase endings must not include the `.' (which
is legal in phrases).

Definition at line 738 of file rfc822.py.

References AddrlistClass.atomends, AddrlistClass.field, dospath.join(), _Subfile.pos, MatchObject.pos, and AddrlistClass.pos.

739  def getatom(self, atomends=None):
740  """Parse an RFC 2822 atom.
741 
742  Optional atomends specifies a different set of end token delimiters
743  (the default is to use self.atomends). This is used e.g. in
744  getphraselist() since phrase endings must not include the `.' (which
745  is legal in phrases)."""
746  atomlist = ['']
747  if atomends is None:
748  atomends = self.atomends
749 
750  while self.pos < len(self.field):
751  if self.field[self.pos] in atomends:
752  break
753  else: atomlist.append(self.field[self.pos])
754  self.pos = self.pos + 1
755 
756  return ''.join(atomlist)
def getcomment (   self)
Get a parenthesis-delimited fragment from self's field.

Definition at line 730 of file rfc822.py.

References AddrlistClass.getdelimited().

731  def getcomment(self):
732  """Get a parenthesis-delimited fragment from self's field."""
733  return self.getdelimited('(', ')\r', 1)
def getdelimited (   self,
  beginchar,
  endchars,
  allowcomments = 1 
)
Parse a header fragment delimited by special characters.

`beginchar' is the start character for the fragment.  If self is not
looking at an instance of `beginchar' then getdelimited returns the
empty string.

`endchars' is a sequence of allowable end-delimiting characters.
Parsing stops when one of these is encountered.

If `allowcomments' is non-zero, embedded RFC 2822 comments are allowed
within the parsed fragment.

Definition at line 690 of file rfc822.py.

References AddrlistClass.field, AddrlistClass.getcomment(), dospath.join(), _Subfile.pos, MatchObject.pos, and AddrlistClass.pos.

691  def getdelimited(self, beginchar, endchars, allowcomments = 1):
692  """Parse a header fragment delimited by special characters.
693 
694  `beginchar' is the start character for the fragment. If self is not
695  looking at an instance of `beginchar' then getdelimited returns the
696  empty string.
697 
698  `endchars' is a sequence of allowable end-delimiting characters.
699  Parsing stops when one of these is encountered.
700 
701  If `allowcomments' is non-zero, embedded RFC 2822 comments are allowed
702  within the parsed fragment.
703  """
704  if self.field[self.pos] != beginchar:
705  return ''
706 
707  slist = ['']
708  quote = 0
709  self.pos = self.pos + 1
710  while self.pos < len(self.field):
711  if quote == 1:
712  slist.append(self.field[self.pos])
713  quote = 0
714  elif self.field[self.pos] in endchars:
715  self.pos = self.pos + 1
716  break
717  elif allowcomments and self.field[self.pos] == '(':
718  slist.append(self.getcomment())
719  elif self.field[self.pos] == '\\':
720  quote = 1
721  else:
722  slist.append(self.field[self.pos])
723  self.pos = self.pos + 1
724 
725  return ''.join(slist)
def getdomain (   self)
Get the complete domain name from an address.

Definition at line 672 of file rfc822.py.

References AddrlistClass.atomends, AddrlistClass.field, AddrlistClass.getatom(), AddrlistClass.getcomment(), AddrlistClass.getdomainliteral(), dospath.join(), AddrlistClass.LWS, _Subfile.pos, MatchObject.pos, and AddrlistClass.pos.

673  def getdomain(self):
674  """Get the complete domain name from an address."""
675  sdlist = []
676  while self.pos < len(self.field):
677  if self.field[self.pos] in self.LWS:
678  self.pos = self.pos + 1
679  elif self.field[self.pos] == '(':
680  self.commentlist.append(self.getcomment())
681  elif self.field[self.pos] == '[':
682  sdlist.append(self.getdomainliteral())
683  elif self.field[self.pos] == '.':
684  self.pos = self.pos + 1
685  sdlist.append('.')
686  elif self.field[self.pos] in self.atomends:
687  break
688  else: sdlist.append(self.getatom())
689  return ''.join(sdlist)
def getdomainliteral (   self)
Parse an RFC 2822 domain-literal.

Definition at line 734 of file rfc822.py.

References AddrlistClass.getdelimited().

735  def getdomainliteral(self):
736  """Parse an RFC 2822 domain-literal."""
737  return '[%s]' % self.getdelimited('[', ']\r', 0)
def getphraselist (   self)
Parse a sequence of RFC 2822 phrases.

A phrase is a sequence of words, which are in turn either RFC 2822
atoms or quoted-strings.  Phrases are canonicalized by squeezing all
runs of continuous whitespace into one space.

Definition at line 757 of file rfc822.py.

References AddrlistClass.field, AddrlistClass.getatom(), AddrlistClass.getcomment(), AddrlistClass.getquote(), AddrlistClass.LWS, AddrlistClass.phraseends, _Subfile.pos, MatchObject.pos, and AddrlistClass.pos.

758  def getphraselist(self):
759  """Parse a sequence of RFC 2822 phrases.
760 
761  A phrase is a sequence of words, which are in turn either RFC 2822
762  atoms or quoted-strings. Phrases are canonicalized by squeezing all
763  runs of continuous whitespace into one space.
764  """
765  plist = []
766 
767  while self.pos < len(self.field):
768  if self.field[self.pos] in self.LWS:
769  self.pos = self.pos + 1
770  elif self.field[self.pos] == '"':
771  plist.append(self.getquote())
772  elif self.field[self.pos] == '(':
773  self.commentlist.append(self.getcomment())
774  elif self.field[self.pos] in self.phraseends:
775  break
776  else:
777  plist.append(self.getatom(self.phraseends))
778 
779  return plist
def getquote (   self)
Get a quote-delimited fragment from self's field.

Definition at line 726 of file rfc822.py.

References AddrlistClass.getdelimited().

727  def getquote(self):
728  """Get a quote-delimited fragment from self's field."""
729  return self.getdelimited('"', '"\r', 0)
def getrouteaddr (   self)
Parse a route address (Return-path value).

This method just skips all the route stuff and returns the addrspec.

Definition at line 616 of file rfc822.py.

References AddrlistClass.field, AddrlistClass.getaddrspec(), AddrlistClass.getdomain(), AddrlistClass.gotonext(), _Subfile.pos, MatchObject.pos, and AddrlistClass.pos.

617  def getrouteaddr(self):
618  """Parse a route address (Return-path value).
619 
620  This method just skips all the route stuff and returns the addrspec.
621  """
622  if self.field[self.pos] != '<':
623  return
624 
625  expectroute = 0
626  self.pos = self.pos + 1
627  self.gotonext()
628  adlist = ""
629  while self.pos < len(self.field):
630  if expectroute:
631  self.getdomain()
632  expectroute = 0
633  elif self.field[self.pos] == '>':
634  self.pos = self.pos + 1
635  break
636  elif self.field[self.pos] == '@':
637  self.pos = self.pos + 1
638  expectroute = 1
639  elif self.field[self.pos] == ':':
640  self.pos = self.pos + 1
641  else:
642  adlist = self.getaddrspec()
643  self.pos = self.pos + 1
644  break
645  self.gotonext()
646 
647  return adlist
def gotonext (   self)
Parse up to the start of the next address.

Definition at line 535 of file rfc822.py.

References AddrlistClass.field, AddrlistClass.getcomment(), AddrlistClass.LWS, _Subfile.pos, MatchObject.pos, and AddrlistClass.pos.

536  def gotonext(self):
537  """Parse up to the start of the next address."""
538  while self.pos < len(self.field):
539  if self.field[self.pos] in self.LWS + '\n\r':
540  self.pos = self.pos + 1
541  elif self.field[self.pos] == '(':
542  self.commentlist.append(self.getcomment())
543  else: break

Field Documentation

atomends

Definition at line 527 of file rfc822.py.

commentlist

Definition at line 533 of file rfc822.py.

CR

Definition at line 526 of file rfc822.py.

field

Definition at line 532 of file rfc822.py.

LWS

Definition at line 525 of file rfc822.py.

phraseends

Definition at line 531 of file rfc822.py.

pos

Definition at line 524 of file rfc822.py.

specials

Definition at line 523 of file rfc822.py.


The documentation for this class was generated from the following file: