iro/telnumber.py
branchdevel
changeset 267 ef2df3f23cb1
parent 139 65117fd28400
child 291 84eb5a7a715a
equal deleted inserted replaced
266:a0adcb788fec 267:ef2df3f23cb1
    14 import re
    14 import re
    15 
    15 
    16 from .error import InvalidTel
    16 from .error import InvalidTel
    17 
    17 
    18 class Telnumber:
    18 class Telnumber:
       
    19     """A telefonnumer, with splitted country part"""
    19     re_telnum=re.compile(r'^\s*(\+)?([0-9\s\-/\(\)]){5,}\s*$')
    20     re_telnum=re.compile(r'^\s*(\+)?([0-9\s\-/\(\)]){5,}\s*$')
       
    21     """Regex for a complete telefon number"""
       
    22 
    20     re_land=re.compile(r'^\s*(\+|00)(?P<land>[1-9]{2})')
    23     re_land=re.compile(r'^\s*(\+|00)(?P<land>[1-9]{2})')
       
    24     """Regex for country part"""
       
    25 
    21     re_number=re.compile(r'[^0-9]')
    26     re_number=re.compile(r'[^0-9]')
       
    27     """Regex for numbers"""
       
    28 
    22     std_land="49"
    29     std_land="49"
       
    30     """Standard country part"""
    23 
    31 
    24     def __init__(self,number=None):
    32     def __init__(self,number=None):
       
    33         """
       
    34         :param string number: a telefonnumber
       
    35         
       
    36         .. automethod:: __eq__
       
    37         .. automethod:: __neq__
       
    38         .. automethod:: __hash__
       
    39         .. automethod:: __str__
       
    40         .. automethod:: __repr__
       
    41 
       
    42         """
       
    43         self.land = None
       
    44         """Country part of a telefonnumber"""
       
    45         
       
    46         self.number = None
       
    47         """Localpart of the telefonnumber"""
       
    48         
    25         if not(number is  None):
    49         if not(number is  None):
    26             self.createNumber(number)
    50             self.createNumber(number)
    27 
    51 
    28     def createNumber(self, number):
    52     def createNumber(self, number):
       
    53         """Split string into two parts: one country part and the rest.
    29         
    54         
       
    55         For a local number :attr:`std_land` will be used for country part.
       
    56 
       
    57         :param string number: a telefonnumber
       
    58         """
    30         if not self.re_telnum.match(number):
    59         if not self.re_telnum.match(number):
    31             raise InvalidTel(number)
    60             raise InvalidTel(number)
    32         
    61         
    33         
    62         
    34         self.land=self.std_land
    63         self.land=self.std_land
       
    64 
    35         land=self.re_land.match(number)
    65         land=self.re_land.match(number)
    36         
    66         
    37         if land:
    67         if land:
    38             self.land=land.group("land")
    68             self.land=land.group("land")
    39             number=number[land.end("land"):]
    69             number=number[land.end("land"):]
    44             number=number[1:]
    74             number=number[1:]
    45 
    75 
    46         self.number = number
    76         self.number = number
    47         
    77         
    48     def __eq__(self, y):
    78     def __eq__(self, y):
       
    79         """Return ``True``, if y hase the same telefonnumber"""
    49         return ((self.number == y.number) and ( self.land == y.land))
    80         return ((self.number == y.number) and ( self.land == y.land))
    50     
    81     
    51     def __ne__(self, y):
    82     def __neq__(self, y):
       
    83         """Return ``True``, if y is not equal (see :meth:`__eq__`)"""
    52         return not self.__eq__(y)
    84         return not self.__eq__(y)
    53 
    85 
    54     def __hash__(self):
    86     def __hash__(self):
       
    87         """Return the Hash for telefonnumbers.
       
    88 
       
    89         Yust use the hash of the string representation of the Number
       
    90         """
    55         return str(self).__hash__()
    91         return str(self).__hash__()
    56 
    92 
    57     def __str__(self):
    93     def __str__(self):
       
    94         """String representation of the telefonnumber.
       
    95 
       
    96         :return: the international telefonnumber with leading zeros
       
    97         """
    58         return "00%s%s"%(self.land,self.number)
    98         return "00%s%s"%(self.land,self.number)
    59 
    99 
    60     def __repr__(self):
   100     def __repr__(self):
       
   101         """debug representation of the class.
       
   102         
       
   103         :return: `<Telnumber 0012345667>`
       
   104         """
    61         return "<Telnumber %s>"%str(self)
   105         return "<Telnumber %s>"%str(self)