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)