iro/telnumber.py
author Sandro Knauß <knauss@netzguerilla.net>
Wed, 21 Mar 2012 17:24:46 +0100
branchdevel
changeset 234 08fcc2b6df99
parent 139 65117fd28400
child 267 ef2df3f23cb1
permissions -rw-r--r--
refactoring task._run
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
#Copyright (C) 2009  Sandro Knauß <bugs@sandroknauss.de>
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     3
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
#This program is free software; you can redistribute it and/or modify it under the terms
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     5
#of the GNU General Public License as published by the Free Software Foundation;
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
#either version 3 of the License, or any later version.
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
#This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
#without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
#See the GNU General Public License for more details.
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
#You should have received a copy of the GNU General Public License
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    12
#along with this program; if not, see <http://www.gnu.org/licenses/>.
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
import re
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
129
d6704178a18f renaming NotATelNumber -> InvalidTel
Sandro Knauß <knauss@netzguerilla.net>
parents: 126
diff changeset
    16
from .error import InvalidTel
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
126
1ac2439a68b5 adding test function for email- and telefonnumbers.
Sandro Knauß <knauss@netzguerilla.net>
parents: 0
diff changeset
    18
class Telnumber:
1ac2439a68b5 adding test function for email- and telefonnumbers.
Sandro Knauß <knauss@netzguerilla.net>
parents: 0
diff changeset
    19
    re_telnum=re.compile(r'^\s*(\+)?([0-9\s\-/\(\)]){5,}\s*$')
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
    re_land=re.compile(r'^\s*(\+|00)(?P<land>[1-9]{2})')
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
    re_number=re.compile(r'[^0-9]')
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
    std_land="49"
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
    def __init__(self,number=None):
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
        if not(number is  None):
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
            self.createNumber(number)
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
    def createNumber(self, number):
126
1ac2439a68b5 adding test function for email- and telefonnumbers.
Sandro Knauß <knauss@netzguerilla.net>
parents: 0
diff changeset
    29
        
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
        if not self.re_telnum.match(number):
129
d6704178a18f renaming NotATelNumber -> InvalidTel
Sandro Knauß <knauss@netzguerilla.net>
parents: 126
diff changeset
    31
            raise InvalidTel(number)
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
        
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
        
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
        self.land=self.std_land
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
        land=self.re_land.match(number)
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    36
        
126
1ac2439a68b5 adding test function for email- and telefonnumbers.
Sandro Knauß <knauss@netzguerilla.net>
parents: 0
diff changeset
    37
        if land:
0
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    38
            self.land=land.group("land")
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
            number=number[land.end("land"):]
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
            
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    41
        number=self.re_number.sub('',number)
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
        
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    43
        if number[0]=="0":
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
            number=number[1:]
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    46
        self.number = number
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    47
        
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    48
    def __eq__(self, y):
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    49
        return ((self.number == y.number) and ( self.land == y.land))
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
    
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
    def __ne__(self, y):
a3b6e531f0d2 [svn r93] creating iro package branch
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
        return not self.__eq__(y)
139
65117fd28400 making telnumbers hashable
Sandro Knauß <knauss@netzguerilla.net>
parents: 129
diff changeset
    53
65117fd28400 making telnumbers hashable
Sandro Knauß <knauss@netzguerilla.net>
parents: 129
diff changeset
    54
    def __hash__(self):
65117fd28400 making telnumbers hashable
Sandro Knauß <knauss@netzguerilla.net>
parents: 129
diff changeset
    55
        return str(self).__hash__()
65117fd28400 making telnumbers hashable
Sandro Knauß <knauss@netzguerilla.net>
parents: 129
diff changeset
    56
65117fd28400 making telnumbers hashable
Sandro Knauß <knauss@netzguerilla.net>
parents: 129
diff changeset
    57
    def __str__(self):
65117fd28400 making telnumbers hashable
Sandro Knauß <knauss@netzguerilla.net>
parents: 129
diff changeset
    58
        return "00%s%s"%(self.land,self.number)
65117fd28400 making telnumbers hashable
Sandro Knauß <knauss@netzguerilla.net>
parents: 129
diff changeset
    59
65117fd28400 making telnumbers hashable
Sandro Knauß <knauss@netzguerilla.net>
parents: 129
diff changeset
    60
    def __repr__(self):
65117fd28400 making telnumbers hashable
Sandro Knauß <knauss@netzguerilla.net>
parents: 129
diff changeset
    61
        return "<Telnumber %s>"%str(self)