Source code for iro.telnumber
# Copyright (c) 2012 netzguerilla.net <iro@netzguerilla.net>
#
# This file is part of Iro.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the "Software"), to deal in
# the Software without restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
# #Software, and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# -*- coding: utf-8 -*-
import re
from .error import InvalidTel
[docs]class Telnumber:
"""A telefonnumer, with splitted country part"""
re_telnum=re.compile(r'^\s*(\+)?([0-9\s\-/\(\)]){5,}\s*$')
"""Regex for a complete telefon number"""
re_land=re.compile(r'^\s*(\+|00)(?P<land>[1-9]{2})')
"""Regex for country part"""
re_number=re.compile(r'[^0-9]')
"""Regex for numbers"""
std_land="49"
"""Standard country part"""
def __init__(self,number=None):
"""
:param string number: a telefonnumber
.. automethod:: __eq__
.. automethod:: __neq__
.. automethod:: __hash__
.. automethod:: __str__
.. automethod:: __repr__
"""
self.land = None
"""Country part of a telefonnumber"""
self.number = None
"""Localpart of the telefonnumber"""
if not(number is None):
self.createNumber(number)
[docs] def createNumber(self, number):
"""Split string into two parts: one country part and the rest.
For a local number :attr:`std_land` will be used for country part.
:param string number: a telefonnumber
"""
if not self.re_telnum.match(number):
raise InvalidTel(number)
self.land=self.std_land
land=self.re_land.match(number)
if land:
self.land=land.group("land")
number=number[land.end("land"):]
number=self.re_number.sub('',number)
if number[0]=="0":
number=number[1:]
self.number = number
[docs] def __eq__(self, y):
"""Return ``True``, if y hase the same telefonnumber"""
return ((self.number == y.number) and ( self.land == y.land))
[docs] def __neq__(self, y):
"""Return ``True``, if y is not equal (see :meth:`__eq__`)"""
return not self.__eq__(y)
[docs] def __hash__(self):
"""Return the Hash for telefonnumbers.
Yust use the hash of the string representation of the Number
"""
return str(self).__hash__()
[docs] def __str__(self):
"""String representation of the telefonnumber.
:return: the international telefonnumber with leading zeros
"""
return "00%s%s"%(self.land,self.number)
[docs] def __repr__(self):
"""debug representation of the class.
:return: `<Telnumber 0012345667>`
"""
return "<Telnumber %s>"%str(self)