Skip to content

Commit

Permalink
Added several methods for th second release
Browse files Browse the repository at this point in the history
Fixed minor bugs and typos
  • Loading branch information
mohamine18 committed Jun 15, 2020
1 parent dc1bb50 commit bdbb197
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 17 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,7 @@ Pipfile
Pipfile.lock
run.py
python_algerian_mobile_phone_number/__pycache__/*
python_algerian_mobile_phone_number.egg-info
dist/*
build/*

41 changes: 34 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Create an instance of the class AlgerianMobilePhoneNumber and pass the phone num

- Import
```python
from python_algerian_mobile_phone_number.AlgerianMobilePhoneNumber import AlgerianMobilePhoneNumber
from python_algerian_mobile_phone_number import AlgerianMobilePhoneNumber
```

```python
Expand Down Expand Up @@ -50,27 +50,54 @@ phoneNumber = AlgerianMobilePhoneNumber('07-70-00-00-00')
To get the string representation of the instance use the built in function __str\__:

```python
phoneNumber.__str__() // -> '0770000000'
phoneNumber.__str__() #'0770000000'
```

#### equalsTo

To compare two phone numbers:
```python
other = AlgerianMobilePhoneNumber('0770000000')
phoneNumber.equalsTo(other) // -> True
phoneNumber.equalsTo(other) #True
```

#### isMobilis, isDjezzy and isOoredoo

To check the mobile phone number provider including Mobilis, Djezzy and Ooredoo

```python
phoneNumber = AlgerianMobilePhoneNumber('0770000000');
phoneNumber.isMobilis() // -> False
phoneNumber.isDjezzy() // -> True
phoneNumber.isOoredoo() // -> False
phoneNumber = AlgerianMobilePhoneNumber('0770000000')
phoneNumber.isMobilis() #False
phoneNumber.isDjezzy() #True
phoneNumber.isOoredoo() #False
```

#### changeNumber

To change the phone number of an instance:
```python
phoneNumber = AlgerianMobilePhoneNumber('0770000000')
phoneNumber.changeNumber('0798000000') #'0798000000'
```

#### convertToInternational

The method takes one parameter named prefix -- values only '00' and '+'
```python
phoneNumber = AlgerianMobilePhoneNumber('0770000000')
phoneNumber.convertToInternational() #'00213770000000'
phoneNumber.convertToInternational('00') #'00213770000000'
phoneNumber.convertToInternational('+') #'+213770000000'
```

#### convertToLocal

The method convert the internaltionl number to local one. Accepts both '00213' and '+213'
```python
phoneNumber = AlgerianMobilePhoneNumber('00213770000000')
phoneNumber.convertToLocal() #'0770000000'
```
>__NOTE__: convertToInternational and convertToLocal does not change the number instance so you can assign it to a variable. If you want to change the class instance use changeNumber instead to avoid mistakes.
## Contribution
Contributions are welcome to give the best of this package.
Expand Down
49 changes: 41 additions & 8 deletions python_algerian_mobile_phone_number/AlgerianMobilePhoneNumber.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import re

class AlgerianMobilePhoneNumber:

def __init__(self, number):
'''
__init__ reserved method is called each time an object is created from the class in order to initialize the attributes.
Expand All @@ -19,38 +20,38 @@ def __init__(self, number):
pattern = r"^(00213|\+213|0)(5|6|7)[0-9]{8}"
result = re.match(pattern, str(number))
if result is not None:
self.number = str(number)
self._number = str(number)
else:
raise Exception('Phone number is invalid!')

def __str__(self):
'''
__str__ The string representation of the class instace number
'''
return self.number
return str(self._number)

def isMobilis(self):
'''
check if it is a Mobilis phone number
'''
pattern = r"^(00213|\+213|0)(6)[0-9]{8}"
result = re.match(pattern, self.number)
result = re.match(pattern, self._number)
return True if result is not None else False

def isDjezzy(self):
'''
check if it is a Djezzy phone number
'''
pattern = r"^(00213|\+213|0)(7)[0-9]{8}"
result = re.match(pattern, self.number)
result = re.match(pattern, self._number)
return True if result is not None else False

def isOoredoo(self):
'''
check if it is an Ooredoo phone number
'''
pattern = r"^(00213|\+213|0)(5)[0-9]{8}"
result = re.match(pattern, self.number)
result = re.match(pattern, self._number)
return True if result is not None else False

def __number_without_prefix(self):
Expand All @@ -59,11 +60,43 @@ def __number_without_prefix(self):
This method is used to compare the phone numbers
'''
pattern_without_prefix = r"(5|6|7)[0-9]{8}"
match = re.search(pattern_without_prefix, self.number)
return self.number[match.start():]
match = re.search(pattern_without_prefix, self._number)
return self._number[match.start():]

def equalsTo(self, other):
'''
Check if two given algerian phone numbers are equal or not
'''
return self.__number_without_prefix() == other.__number_without_prefix()
return self.__number_without_prefix() == other.__number_without_prefix()

def changeNumber(self, newnumber):
'''
Change the phone number value is a safe way to avoid assigning mistakes
Also must be used with the convertors when changing number format
'''
replace = AlgerianMobilePhoneNumber(newnumber)
self._number = replace.__str__()
return self._number

def convertToInternational(self, prefix='00'):
'''
A method to convert a valid mobile phone number to an international one
Returns a new value without overwrite the instance value
'''
if prefix == '00' or prefix == '+':
pattern = r"^(00213|\+213|0)"
newnumber = re.sub(pattern, f'{prefix}213', self._number)
return newnumber
else:
raise Exception("Prefix Invalid!")

def convertToLocal(self):
'''
A method to convert a valid mobile phone number to a local one
Returns a new value without overwrite the instance value
'''
pattern = r"^(00213|\+213|0)"
newnumber = re.sub(pattern, '0', self._number)
return newnumber

#TODO: add locallines detectors
1 change: 1 addition & 0 deletions python_algerian_mobile_phone_number/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .AlgerianMobilePhoneNumber import AlgerianMobilePhoneNumber
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setuptools.setup(
name="python_algerian_mobile_phone_number",
version="0.1",
version="0.2",
author="Mohammed Amine BOURAS",
author_email="mohamine19@gmail.com",
description="Algerian mobile phone number package",
Expand Down
26 changes: 25 additions & 1 deletion test.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,28 @@ def test_equalsTo():
other = AlgerianMobilePhoneNumber('0550000000')
for number in numbers:
instance = AlgerianMobilePhoneNumber(number)
assert instance.equalsTo(other)
assert instance.equalsTo(other)

def test_changeNumber():
numbers = ['0550000000','00213660000000','+213770000000']
for number in numbers:
instance = AlgerianMobilePhoneNumber(number)
assert instance.changeNumber('0798000000') == '0798000000'

def test_convertToInternational():
numbers = ['0550000000','00213660000000','+213770000000']
number_00213 = ['00213550000000','00213660000000','00213770000000']
number_plus_213 = ['+213550000000','+213660000000','+213770000000']
for index, number in enumerate(numbers):
instance = AlgerianMobilePhoneNumber(number)
assert instance.convertToInternational('00') == number_00213[index]
for index, number in enumerate(numbers):
instance = AlgerianMobilePhoneNumber(number)
assert instance.convertToInternational('+') == number_plus_213[index]

def test_convertToLocal():
numbers = ['0550000000','00213660000000','+213770000000']
number_local = ['0550000000','0660000000','0770000000']
for index, number in enumerate(numbers):
instance = AlgerianMobilePhoneNumber(number)
assert instance.convertToLocal() == number_local[index]

0 comments on commit bdbb197

Please sign in to comment.