nepali 0.5.5__py3-none-any.whl → 1.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nepali/__init__.py +1 -1
- nepali/char.py +102 -81
- nepali/constants.py +66 -0
- nepali/date_converter.py +334 -0
- nepali/datetime/__init__.py +13 -14
- nepali/datetime/_datetime.py +391 -402
- nepali/datetime/_formatter.py +325 -0
- nepali/datetime/_humanize.py +117 -132
- nepali/datetime/_nepalimonth.py +118 -0
- nepali/datetime/_nepaliweek.py +125 -0
- nepali/datetime/parser/__init__.py +4 -4
- nepali/datetime/parser/_parser.py +59 -50
- nepali/datetime/parser/validators.py +249 -159
- nepali/datetime/utils.py +38 -0
- nepali/exceptions.py +8 -3
- nepali/locations/__init__.py +3 -0
- nepali/locations/_data.py +4271 -0
- nepali/locations/_locations.py +38 -0
- nepali/locations/models.py +104 -0
- nepali/locations/utils.py +54 -0
- nepali/number/__init__.py +19 -0
- nepali/number/_nepalinumber.py +563 -0
- nepali/number/_number.py +53 -0
- nepali/number/utils.py +72 -0
- nepali/phone_number.py +183 -0
- nepali/templatetags/__init__.py +0 -0
- nepali/templatetags/nepalidatetime.py +194 -24
- nepali/templatetags/nepalinumber.py +97 -7
- nepali/tests/test_date_converter.py +148 -0
- nepali/tests/test_datetime.py +275 -29
- nepali/tests/test_humanize.py +78 -7
- nepali/tests/test_locations.py +154 -0
- nepali/tests/test_nepalimonth.py +152 -0
- nepali/tests/test_nepaliweek.py +154 -0
- nepali/tests/test_number.py +3152 -0
- nepali/tests/test_parser.py +82 -69
- nepali/tests/test_phone_number.py +254 -0
- nepali/tests/test_timezone.py +192 -0
- nepali/timezone.py +50 -7
- nepali/utils.py +9 -68
- nepali-1.2.0.dist-info/METADATA +476 -0
- nepali-1.2.0.dist-info/RECORD +46 -0
- {nepali-0.5.5.dist-info → nepali-1.2.0.dist-info}/WHEEL +1 -1
- {nepali-0.5.5.dist-info → nepali-1.2.0.dist-info/licenses}/LICENSE +1 -1
- {nepali-0.5.5.dist-info → nepali-1.2.0.dist-info}/top_level.txt +0 -0
- nepali/datetime/_converter.py +0 -394
- nepali/datetime/_formarter.py +0 -314
- nepali/datetime.py +0 -1169
- nepali/number.py +0 -51
- nepali-0.5.5.dist-info/METADATA +0 -220
- nepali-0.5.5.dist-info/RECORD +0 -27
nepali/tests/test_parser.py
CHANGED
|
@@ -8,9 +8,9 @@ from nepali.exceptions import FormatNotMatchException, InvalidDateTimeFormatExce
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class TestNepaliDateTimeParserValidators(unittest.TestCase):
|
|
11
|
-
|
|
11
|
+
"""
|
|
12
12
|
Tests nepali date
|
|
13
|
-
|
|
13
|
+
"""
|
|
14
14
|
|
|
15
15
|
def setUp(self) -> None:
|
|
16
16
|
self.nepali_time_re = NepaliTimeRE()
|
|
@@ -20,89 +20,100 @@ class TestNepaliDateTimeParserValidators(unittest.TestCase):
|
|
|
20
20
|
|
|
21
21
|
def test_simple_extract(self):
|
|
22
22
|
extracted_data = extract("2078-01-12", format="%Y-%m-%d")
|
|
23
|
-
self.assertEqual(extracted_data.get(
|
|
24
|
-
self.assertEqual(extracted_data.get(
|
|
25
|
-
self.assertEqual(extracted_data.get(
|
|
23
|
+
self.assertEqual(extracted_data.get("Y"), "2078")
|
|
24
|
+
self.assertEqual(extracted_data.get("m"), "01")
|
|
25
|
+
self.assertEqual(extracted_data.get("d"), "12")
|
|
26
26
|
|
|
27
27
|
def test_complex_extract(self):
|
|
28
|
-
extracted_data = extract(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
self.assertEqual(extracted_data.get(
|
|
33
|
-
self.assertEqual(extracted_data.get(
|
|
34
|
-
self.assertEqual(extracted_data.get(
|
|
35
|
-
self.assertEqual(extracted_data.get(
|
|
36
|
-
self.assertEqual(extracted_data.get(
|
|
37
|
-
self.assertEqual(extracted_data.get(
|
|
38
|
-
self.assertEqual(extracted_data.get(
|
|
39
|
-
self.assertEqual(extracted_data.get(
|
|
40
|
-
self.assertEqual(extracted_data.get(
|
|
41
|
-
self.assertEqual(extracted_data.get(
|
|
42
|
-
self.assertEqual(extracted_data.get(
|
|
28
|
+
extracted_data = extract(
|
|
29
|
+
"Wed Wednesday 3 28 Sharwan Sharwan 04 51 2051 05 05 AM 28 23",
|
|
30
|
+
format="%a %A %w %d %b %B %m %y %Y %H %I %p %M %S",
|
|
31
|
+
)
|
|
32
|
+
self.assertEqual(extracted_data.get("a"), "Wed")
|
|
33
|
+
self.assertEqual(extracted_data.get("A"), "Wednesday")
|
|
34
|
+
self.assertEqual(extracted_data.get("w"), "3")
|
|
35
|
+
self.assertEqual(extracted_data.get("d"), "28")
|
|
36
|
+
self.assertEqual(extracted_data.get("b"), "Sharwan")
|
|
37
|
+
self.assertEqual(extracted_data.get("B"), "Sharwan")
|
|
38
|
+
self.assertEqual(extracted_data.get("m"), "04")
|
|
39
|
+
self.assertEqual(extracted_data.get("y"), "51")
|
|
40
|
+
self.assertEqual(extracted_data.get("Y"), "2051")
|
|
41
|
+
self.assertEqual(extracted_data.get("H"), "05")
|
|
42
|
+
self.assertEqual(extracted_data.get("I"), "05")
|
|
43
|
+
self.assertEqual(extracted_data.get("p"), "AM")
|
|
44
|
+
self.assertEqual(extracted_data.get("M"), "28")
|
|
45
|
+
self.assertEqual(extracted_data.get("S"), "23")
|
|
43
46
|
|
|
44
47
|
def test_nepali_to_english_text_conversion(self):
|
|
45
48
|
self.assertEqual(
|
|
46
|
-
nepali_to_english_text(
|
|
47
|
-
|
|
49
|
+
nepali_to_english_text(
|
|
50
|
+
"बुध बुधबार ३ २८ साउन साउन ०४ ५१ २०५१ ०५ ०५ शुभप्रभात २८ २३"
|
|
51
|
+
),
|
|
52
|
+
"Wed Wednesday 3 28 Sharwan Sharwan 04 51 2051 05 05 AM 28 23",
|
|
48
53
|
)
|
|
49
54
|
|
|
50
55
|
def test_complex_extract_in_nepali(self):
|
|
51
|
-
extracted_data = extract(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
self.assertEqual(extracted_data.get(
|
|
56
|
-
self.assertEqual(extracted_data.get(
|
|
57
|
-
self.assertEqual(extracted_data.get(
|
|
58
|
-
self.assertEqual(extracted_data.get(
|
|
59
|
-
self.assertEqual(extracted_data.get(
|
|
60
|
-
self.assertEqual(extracted_data.get(
|
|
61
|
-
self.assertEqual(extracted_data.get(
|
|
62
|
-
self.assertEqual(extracted_data.get(
|
|
63
|
-
self.assertEqual(extracted_data.get(
|
|
64
|
-
self.assertEqual(extracted_data.get(
|
|
65
|
-
self.assertEqual(extracted_data.get(
|
|
66
|
-
|
|
56
|
+
extracted_data = extract(
|
|
57
|
+
"बुध बुधबार ३ २८ साउन साउन ०४ ५१ २०५१ ०५ ०५ शुभप्रभात २८ २३",
|
|
58
|
+
format="%a %A %w %d %b %B %m %y %Y %H %I %p %M %S",
|
|
59
|
+
)
|
|
60
|
+
self.assertEqual(extracted_data.get("a"), "Wed")
|
|
61
|
+
self.assertEqual(extracted_data.get("A"), "Wednesday")
|
|
62
|
+
self.assertEqual(extracted_data.get("w"), "3")
|
|
63
|
+
self.assertEqual(extracted_data.get("d"), "28")
|
|
64
|
+
self.assertEqual(extracted_data.get("b"), "Sharwan")
|
|
65
|
+
self.assertEqual(extracted_data.get("B"), "Sharwan")
|
|
66
|
+
self.assertEqual(extracted_data.get("m"), "04")
|
|
67
|
+
self.assertEqual(extracted_data.get("y"), "51")
|
|
68
|
+
self.assertEqual(extracted_data.get("Y"), "2051")
|
|
69
|
+
self.assertEqual(extracted_data.get("H"), "05")
|
|
70
|
+
self.assertEqual(extracted_data.get("I"), "05")
|
|
71
|
+
self.assertEqual(extracted_data.get("p"), "AM")
|
|
72
|
+
self.assertEqual(extracted_data.get("M"), "28")
|
|
73
|
+
self.assertEqual(extracted_data.get("S"), "23")
|
|
67
74
|
|
|
68
75
|
# test transform
|
|
69
76
|
def test_transform(self):
|
|
70
|
-
data = transform(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
self.assertEqual(data.get(
|
|
84
|
-
self.assertEqual(data.get(
|
|
85
|
-
self.assertEqual(data.get(
|
|
86
|
-
self.assertEqual(data.get(
|
|
87
|
-
self.assertEqual(data.get(
|
|
88
|
-
self.assertEqual(data.get(
|
|
77
|
+
data = transform(
|
|
78
|
+
{
|
|
79
|
+
"Y": "2078",
|
|
80
|
+
"b": "MAngsir",
|
|
81
|
+
"d": "12",
|
|
82
|
+
"p": "pm",
|
|
83
|
+
"I": "05",
|
|
84
|
+
"M": "25",
|
|
85
|
+
"S": "31",
|
|
86
|
+
"f": "455",
|
|
87
|
+
"a": "Wed",
|
|
88
|
+
}
|
|
89
|
+
)
|
|
90
|
+
self.assertEqual(data.get("year"), 2078)
|
|
91
|
+
self.assertEqual(data.get("month"), 8)
|
|
92
|
+
self.assertEqual(data.get("day"), 12)
|
|
93
|
+
self.assertEqual(data.get("hour"), 17)
|
|
94
|
+
self.assertEqual(data.get("minute"), 25)
|
|
95
|
+
self.assertEqual(data.get("second"), 31)
|
|
96
|
+
self.assertEqual(data.get("microsecond"), 455000)
|
|
97
|
+
self.assertEqual(data.get("weekday"), 3)
|
|
89
98
|
|
|
90
99
|
#
|
|
91
100
|
# test validate
|
|
92
101
|
|
|
93
102
|
def test_validate(self):
|
|
94
|
-
nepalidatetime_obj = validate(
|
|
103
|
+
nepalidatetime_obj = validate("2078-01-12", format="%Y-%m-%d")
|
|
95
104
|
self.assertEqual(nepalidatetime_obj.year, 2078)
|
|
96
105
|
self.assertEqual(nepalidatetime_obj.month, 1)
|
|
97
106
|
self.assertEqual(nepalidatetime_obj.day, 12)
|
|
98
107
|
|
|
99
|
-
nepalidatetime_obj = validate(
|
|
108
|
+
nepalidatetime_obj = validate("2079-03-32", format="%Y-%m-%d")
|
|
100
109
|
self.assertEqual(nepalidatetime_obj.year, 2079)
|
|
101
110
|
self.assertEqual(nepalidatetime_obj.month, 3)
|
|
102
111
|
self.assertEqual(nepalidatetime_obj.day, 32)
|
|
103
112
|
|
|
104
113
|
def test_test_validate(self):
|
|
105
|
-
nepalidatetime_obj = validate(
|
|
114
|
+
nepalidatetime_obj = validate(
|
|
115
|
+
"29 Jestha, 2078, 1:30 PM", format="%d %B, %Y, %I:%M %p"
|
|
116
|
+
)
|
|
106
117
|
self.assertEqual(nepalidatetime_obj.year, 2078)
|
|
107
118
|
self.assertEqual(nepalidatetime_obj.month, 2)
|
|
108
119
|
self.assertEqual(nepalidatetime_obj.day, 29)
|
|
@@ -111,35 +122,37 @@ class TestNepaliDateTimeParserValidators(unittest.TestCase):
|
|
|
111
122
|
self.assertEqual(nepalidatetime_obj.second, 0)
|
|
112
123
|
|
|
113
124
|
def test_validate_with_invalid_data(self):
|
|
114
|
-
self.assertEqual(validate(
|
|
115
|
-
self.assertEqual(validate(
|
|
125
|
+
self.assertEqual(validate("2078-01-12", format="%k-%m-%d"), None)
|
|
126
|
+
self.assertEqual(validate("2078-01-12", format="%m-%M-%Y"), None)
|
|
116
127
|
|
|
117
128
|
|
|
118
129
|
class TestNepaliDateTimeParser(unittest.TestCase):
|
|
119
|
-
|
|
130
|
+
"""
|
|
120
131
|
Tests nepali datetime parser.
|
|
121
|
-
|
|
132
|
+
"""
|
|
122
133
|
|
|
123
134
|
# test strptime
|
|
124
135
|
def test_strptime(self):
|
|
125
|
-
nepalidatetime_obj = nepalidatetime_parser.strptime(
|
|
136
|
+
nepalidatetime_obj = nepalidatetime_parser.strptime(
|
|
137
|
+
"2078-01-12", format="%Y-%m-%d"
|
|
138
|
+
)
|
|
126
139
|
self.assertEqual(nepalidatetime_obj.year, 2078)
|
|
127
140
|
self.assertEqual(nepalidatetime_obj.month, 1)
|
|
128
141
|
self.assertEqual(nepalidatetime_obj.day, 12)
|
|
129
142
|
|
|
130
143
|
def test_strptime_fail(self):
|
|
131
144
|
with self.assertRaises(FormatNotMatchException):
|
|
132
|
-
nepalidatetime_parser.strptime(
|
|
145
|
+
nepalidatetime_parser.strptime("2078-01-12", format="%Y %d")
|
|
133
146
|
|
|
134
147
|
# test parser
|
|
135
148
|
|
|
136
149
|
def test_normal_string_parse(self):
|
|
137
|
-
parsed_datetime = nepalidatetime_parser.parse(
|
|
150
|
+
parsed_datetime = nepalidatetime_parser.parse("2071-01-24")
|
|
138
151
|
test_datetime = nepalidatetime(2071, 1, 24)
|
|
139
152
|
self.assertEqual(parsed_datetime, test_datetime)
|
|
140
153
|
|
|
141
154
|
def test_complex_string_parse(self):
|
|
142
|
-
nepalidatetime_obj = nepalidatetime_parser.parse(
|
|
155
|
+
nepalidatetime_obj = nepalidatetime_parser.parse("29 Jestha, 2078, 1:30 PM")
|
|
143
156
|
self.assertEqual(nepalidatetime_obj.year, 2078)
|
|
144
157
|
self.assertEqual(nepalidatetime_obj.month, 2)
|
|
145
158
|
self.assertEqual(nepalidatetime_obj.day, 29)
|
|
@@ -148,4 +161,4 @@ class TestNepaliDateTimeParser(unittest.TestCase):
|
|
|
148
161
|
|
|
149
162
|
def test_parse_failed(self):
|
|
150
163
|
with self.assertRaises(InvalidDateTimeFormatException):
|
|
151
|
-
nepalidatetime_parser.parse(
|
|
164
|
+
nepalidatetime_parser.parse("")
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
from unittest import mock
|
|
3
|
+
|
|
4
|
+
from nepali.phone_number import (
|
|
5
|
+
Operator,
|
|
6
|
+
_get_area_code,
|
|
7
|
+
_get_operator,
|
|
8
|
+
_parse_landline_number,
|
|
9
|
+
_parse_mobile_number,
|
|
10
|
+
get_exact_number,
|
|
11
|
+
is_landline_number,
|
|
12
|
+
is_mobile_number,
|
|
13
|
+
is_valid,
|
|
14
|
+
parse,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class TestOperator(unittest.TestCase):
|
|
19
|
+
def test_operator_with_invalid_data(self):
|
|
20
|
+
with self.assertRaises(ValueError):
|
|
21
|
+
Operator("Hello")
|
|
22
|
+
|
|
23
|
+
def test_operator_with_valid_data(self):
|
|
24
|
+
operator = Operator("Nepal Telecom")
|
|
25
|
+
self.assertEqual(operator, Operator.NEPAL_TELECOM)
|
|
26
|
+
|
|
27
|
+
def test_operator_str(self):
|
|
28
|
+
operator = Operator.NEPAL_TELECOM
|
|
29
|
+
self.assertEqual(str(operator), operator.value)
|
|
30
|
+
|
|
31
|
+
def test_operator_repr(self):
|
|
32
|
+
operator = Operator.NEPAL_TELECOM
|
|
33
|
+
self.assertEqual(repr(operator), f"<Operator: {operator.value}>")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class TestPhoneNumberValidation(unittest.TestCase):
|
|
37
|
+
def test_is_mobile_number(self):
|
|
38
|
+
# True case
|
|
39
|
+
self.assertEqual(is_mobile_number("9779842536789"), True)
|
|
40
|
+
self.assertEqual(is_mobile_number("+9779842536789"), True)
|
|
41
|
+
self.assertEqual(is_mobile_number("+977-9842536789"), True)
|
|
42
|
+
self.assertEqual(is_mobile_number("9842536789"), True)
|
|
43
|
+
self.assertEqual(is_mobile_number("9852536789"), True)
|
|
44
|
+
self.assertEqual(is_mobile_number("9862536789"), True)
|
|
45
|
+
self.assertEqual(is_mobile_number("9742536789"), True)
|
|
46
|
+
self.assertEqual(is_mobile_number("9752536789"), True)
|
|
47
|
+
self.assertEqual(is_mobile_number("9802536789"), True)
|
|
48
|
+
self.assertEqual(is_mobile_number("9812536789"), True)
|
|
49
|
+
self.assertEqual(is_mobile_number("9822536789"), True)
|
|
50
|
+
self.assertEqual(is_mobile_number("9612536789"), True)
|
|
51
|
+
self.assertEqual(is_mobile_number("9622536789"), True)
|
|
52
|
+
self.assertEqual(is_mobile_number("9882536789"), True)
|
|
53
|
+
self.assertEqual(is_mobile_number("9722536789"), True)
|
|
54
|
+
self.assertEqual(is_mobile_number("9632536789"), True)
|
|
55
|
+
|
|
56
|
+
# False case
|
|
57
|
+
self.assertEqual(is_mobile_number(None), False) # type: ignore
|
|
58
|
+
self.assertEqual(is_mobile_number(""), False)
|
|
59
|
+
self.assertEqual(is_mobile_number("test"), False)
|
|
60
|
+
self.assertEqual(is_mobile_number("977test"), False)
|
|
61
|
+
self.assertEqual(is_mobile_number("+977test"), False)
|
|
62
|
+
self.assertEqual(is_mobile_number("+977-test"), False)
|
|
63
|
+
self.assertEqual(is_mobile_number("9551088967"), False)
|
|
64
|
+
self.assertEqual(is_mobile_number("+977-98425367899"), False)
|
|
65
|
+
self.assertEqual(is_mobile_number("+977-984253678"), False)
|
|
66
|
+
self.assertEqual(is_mobile_number("984253678"), False)
|
|
67
|
+
self.assertEqual(is_mobile_number("98425367899"), False)
|
|
68
|
+
|
|
69
|
+
def test_is_landline_number(self):
|
|
70
|
+
# True case
|
|
71
|
+
self.assertEqual(is_landline_number("14231481"), True)
|
|
72
|
+
self.assertEqual(is_landline_number("014231481"), True)
|
|
73
|
+
self.assertEqual(is_landline_number("0215154579"), True)
|
|
74
|
+
self.assertEqual(is_landline_number("+977-142314819"), True)
|
|
75
|
+
self.assertEqual(is_landline_number("0154225639"), True)
|
|
76
|
+
self.assertEqual(is_landline_number("9770154225639"), True)
|
|
77
|
+
self.assertEqual(is_landline_number("0565114679"), True)
|
|
78
|
+
self.assertEqual(is_landline_number("021420451"), True)
|
|
79
|
+
self.assertEqual(is_landline_number("21420451"), True)
|
|
80
|
+
self.assertEqual(is_landline_number("+977-0565114679"), True)
|
|
81
|
+
|
|
82
|
+
# False case
|
|
83
|
+
self.assertEqual(is_landline_number(None), False) # type: ignore
|
|
84
|
+
self.assertEqual(is_landline_number(""), False)
|
|
85
|
+
self.assertEqual(is_landline_number("test"), False)
|
|
86
|
+
self.assertEqual(is_landline_number("977test"), False)
|
|
87
|
+
self.assertEqual(is_landline_number("+977test"), False)
|
|
88
|
+
self.assertEqual(is_landline_number("+977-test"), False)
|
|
89
|
+
|
|
90
|
+
@mock.patch("nepali.phone_number.is_landline_number", return_value=False)
|
|
91
|
+
@mock.patch("nepali.phone_number.is_mobile_number", return_value=False)
|
|
92
|
+
def test_if__is_valid__returns_false_for_invalid_numbers(self, *_):
|
|
93
|
+
self.assertEqual(is_valid("who_cares"), False)
|
|
94
|
+
|
|
95
|
+
@mock.patch("nepali.phone_number.is_landline_number", return_value=True)
|
|
96
|
+
@mock.patch("nepali.phone_number.is_mobile_number", return_value=False)
|
|
97
|
+
def test_if__is_valid__returns_true_for_landline(self, *_):
|
|
98
|
+
self.assertEqual(is_valid("who_cares"), True)
|
|
99
|
+
|
|
100
|
+
@mock.patch("nepali.phone_number.is_landline_number", return_value=False)
|
|
101
|
+
@mock.patch("nepali.phone_number.is_mobile_number", return_value=True)
|
|
102
|
+
def test_if__is_valid__returns_true_for_mobile(self, *_):
|
|
103
|
+
self.assertEqual(is_valid("who_cares"), True)
|
|
104
|
+
|
|
105
|
+
@mock.patch("nepali.phone_number.is_landline_number", return_value=True)
|
|
106
|
+
@mock.patch("nepali.phone_number.is_mobile_number", return_value=True)
|
|
107
|
+
def test_if__is_valid__returns_true_if_both_mobile_and_landline_returns_true(
|
|
108
|
+
self, *_
|
|
109
|
+
):
|
|
110
|
+
self.assertEqual(is_valid("who_cares"), True)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
class TestPhoneNumberFunctions(unittest.TestCase):
|
|
114
|
+
def test_get_exact_number(self):
|
|
115
|
+
self.assertEqual(get_exact_number("9842536789"), "9842536789")
|
|
116
|
+
self.assertEqual(get_exact_number("9779842536789"), "9842536789")
|
|
117
|
+
self.assertEqual(get_exact_number("+9779842536789"), "9842536789")
|
|
118
|
+
self.assertEqual(get_exact_number("+977-9842536789"), "9842536789")
|
|
119
|
+
self.assertEqual(get_exact_number(""), "")
|
|
120
|
+
self.assertEqual(get_exact_number("test"), "test")
|
|
121
|
+
self.assertEqual(get_exact_number("977test"), "test")
|
|
122
|
+
self.assertEqual(get_exact_number("+977test"), "test")
|
|
123
|
+
self.assertEqual(get_exact_number("+977-test"), "test")
|
|
124
|
+
self.assertEqual(get_exact_number("+977-142314819"), "142314819")
|
|
125
|
+
self.assertEqual(get_exact_number("0154225639"), "0154225639")
|
|
126
|
+
self.assertEqual(get_exact_number("9770154225639"), "0154225639")
|
|
127
|
+
self.assertEqual(get_exact_number("0565114679"), "0565114679")
|
|
128
|
+
self.assertEqual(get_exact_number("984-2536789"), "9842536789")
|
|
129
|
+
self.assertEqual(get_exact_number("984-2536-789"), "9842536789")
|
|
130
|
+
with self.assertRaises(AttributeError):
|
|
131
|
+
get_exact_number(None) # type: ignore
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
class TestMobileNumberParser(unittest.TestCase):
|
|
135
|
+
def test__get_operator__with_invalid_input(self):
|
|
136
|
+
self.assertEqual(_get_operator("Hello there"), None)
|
|
137
|
+
|
|
138
|
+
def test__get_operator__with_not_matching_input(self):
|
|
139
|
+
self.assertEqual(_get_operator("9132536789"), None)
|
|
140
|
+
|
|
141
|
+
def test__get_operator__for_ntc(self):
|
|
142
|
+
self.assertEqual(_get_operator("9842536789"), Operator.NEPAL_TELECOM)
|
|
143
|
+
self.assertEqual(_get_operator("9852536789"), Operator.NEPAL_TELECOM)
|
|
144
|
+
self.assertEqual(_get_operator("9862536789"), Operator.NEPAL_TELECOM)
|
|
145
|
+
# For CDMA (Nepal Telecom)
|
|
146
|
+
self.assertEqual(_get_operator("9742536789"), Operator.NEPAL_TELECOM)
|
|
147
|
+
self.assertEqual(_get_operator("9752536789"), Operator.NEPAL_TELECOM)
|
|
148
|
+
|
|
149
|
+
def test__get_operator__for_ncell(self):
|
|
150
|
+
self.assertEqual(_get_operator("9802536789"), Operator.NCELL)
|
|
151
|
+
self.assertEqual(_get_operator("9812536789"), Operator.NCELL)
|
|
152
|
+
self.assertEqual(_get_operator("9822536789"), Operator.NCELL)
|
|
153
|
+
|
|
154
|
+
def test__get_operator__for_smart_cell(self):
|
|
155
|
+
self.assertEqual(_get_operator("9612536789"), Operator.SMART_CELL)
|
|
156
|
+
self.assertEqual(_get_operator("9622536789"), Operator.SMART_CELL)
|
|
157
|
+
self.assertEqual(_get_operator("9882536789"), Operator.SMART_CELL)
|
|
158
|
+
|
|
159
|
+
def test__get_operator__for_utl(self):
|
|
160
|
+
self.assertEqual(_get_operator("9722536789"), Operator.UTL)
|
|
161
|
+
|
|
162
|
+
def test__get_operator__for_hello_mobile(self):
|
|
163
|
+
self.assertEqual(_get_operator("9632536789"), Operator.HELLO_MOBILE)
|
|
164
|
+
|
|
165
|
+
@mock.patch("nepali.phone_number._get_operator", return_value="test")
|
|
166
|
+
def test__parse_mobile_number_returns_valid_data(self, *_):
|
|
167
|
+
data = _parse_mobile_number("+977-9842536789")
|
|
168
|
+
self.assertEqual(data and data["type"], "Mobile")
|
|
169
|
+
self.assertEqual(data and data["operator"], "test")
|
|
170
|
+
self.assertEqual(data and data["number"], "9842536789")
|
|
171
|
+
|
|
172
|
+
@mock.patch("nepali.phone_number._get_operator", return_value=None)
|
|
173
|
+
def test__parse_mobile_number_on_invalid_operator(self, *_):
|
|
174
|
+
data = _parse_mobile_number("+977-14231481")
|
|
175
|
+
self.assertEqual(data, None)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class TestLandlineNumberParser(unittest.TestCase):
|
|
179
|
+
def test__get_area_code_for_kathmandu(self):
|
|
180
|
+
self.assertEqual(_get_area_code("0142314819"), "01")
|
|
181
|
+
self.assertEqual(_get_area_code("0154225639"), "01")
|
|
182
|
+
|
|
183
|
+
def test__get_area_code_for_biratnagar(self):
|
|
184
|
+
self.assertEqual(_get_area_code("021420431"), "021")
|
|
185
|
+
|
|
186
|
+
def test__get_area_code_for_chitwan(self):
|
|
187
|
+
self.assertEqual(_get_area_code("056520198"), "056")
|
|
188
|
+
|
|
189
|
+
def test__get_area_code_for_jhapa(self):
|
|
190
|
+
self.assertEqual(_get_area_code("023455125"), "023")
|
|
191
|
+
|
|
192
|
+
def test__get_area_code_for_rupandehi(self):
|
|
193
|
+
self.assertEqual(_get_area_code("071540029"), "071")
|
|
194
|
+
|
|
195
|
+
def test__get_area_code_for_kaski(self):
|
|
196
|
+
self.assertEqual(_get_area_code("061463076"), "061")
|
|
197
|
+
|
|
198
|
+
def test__get_area_code_for_dhading(self):
|
|
199
|
+
self.assertEqual(_get_area_code("010520133"), "010")
|
|
200
|
+
|
|
201
|
+
def test__get_area_code_for_syangja(self):
|
|
202
|
+
self.assertEqual(_get_area_code("063420211"), "063")
|
|
203
|
+
|
|
204
|
+
@mock.patch("nepali.phone_number._get_area_code", return_value="test")
|
|
205
|
+
def test__parse_landline_number_returns_valid_data(self, *_):
|
|
206
|
+
data = _parse_landline_number("0142314819")
|
|
207
|
+
self.assertEqual(data["type"], "Landline")
|
|
208
|
+
self.assertEqual(data["area_code"], "test")
|
|
209
|
+
self.assertEqual(data["number"], "0142314819")
|
|
210
|
+
|
|
211
|
+
@mock.patch("nepali.phone_number._get_area_code", return_value="test")
|
|
212
|
+
def test__parse_landline_number_returns_valid_data_for_977(self, *_):
|
|
213
|
+
data = _parse_landline_number("+977142314819")
|
|
214
|
+
self.assertEqual(data["type"], "Landline")
|
|
215
|
+
self.assertEqual(data["area_code"], "test")
|
|
216
|
+
self.assertEqual(data["number"], "0142314819")
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
class TestParser(unittest.TestCase):
|
|
220
|
+
def test_none_number_returns_none(self):
|
|
221
|
+
self.assertEqual(parse(None), None) # type: ignore
|
|
222
|
+
|
|
223
|
+
def test_empty_number_returns_none(self):
|
|
224
|
+
self.assertEqual(parse(""), None)
|
|
225
|
+
|
|
226
|
+
@mock.patch("nepali.phone_number.is_mobile_number", return_value=True)
|
|
227
|
+
@mock.patch("nepali.phone_number._parse_mobile_number", return_value="Mobile")
|
|
228
|
+
def test_mobile_number_parsing(self, *_):
|
|
229
|
+
self.assertEqual(parse("number"), "Mobile")
|
|
230
|
+
|
|
231
|
+
@mock.patch("nepali.phone_number.is_mobile_number", return_value=False)
|
|
232
|
+
@mock.patch("nepali.phone_number.is_landline_number", return_value=True)
|
|
233
|
+
@mock.patch("nepali.phone_number._parse_landline_number", return_value="Landline")
|
|
234
|
+
def test_landline_number_parsing(self, *_):
|
|
235
|
+
self.assertEqual(parse("number"), "Landline")
|
|
236
|
+
|
|
237
|
+
@mock.patch("nepali.phone_number.is_mobile_number", return_value=False)
|
|
238
|
+
@mock.patch("nepali.phone_number.is_landline_number", return_value=False)
|
|
239
|
+
def test_invalid_number_returns_none(self, *_):
|
|
240
|
+
self.assertEqual(parse("number"), None)
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
class TestParseIntegration(unittest.TestCase):
|
|
244
|
+
def test_parse_for_mobile_number(self):
|
|
245
|
+
data = parse("+9779842536789")
|
|
246
|
+
self.assertEqual(data and data["type"], "Mobile")
|
|
247
|
+
self.assertEqual(data and data["number"], "9842536789")
|
|
248
|
+
self.assertEqual(data and data["operator"], Operator.NEPAL_TELECOM)
|
|
249
|
+
|
|
250
|
+
def test_parse_for_landline_number(self):
|
|
251
|
+
data = parse("+977-142314819")
|
|
252
|
+
self.assertEqual(data and data["type"], "Landline")
|
|
253
|
+
self.assertEqual(data and data["number"], "0142314819")
|
|
254
|
+
self.assertEqual(data and data["area_code"], "01")
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"""
|
|
2
|
+
To run only this unit test use the command below.
|
|
3
|
+
|
|
4
|
+
python -m unittest nepali/tests/test_timezone.py -v
|
|
5
|
+
"""
|
|
6
|
+
import datetime
|
|
7
|
+
import unittest
|
|
8
|
+
from unittest.mock import patch
|
|
9
|
+
|
|
10
|
+
from nepali.constants import NEPAL_TIMEZONE
|
|
11
|
+
from nepali.timezone import (
|
|
12
|
+
NepaliTimeZone,
|
|
13
|
+
get_timezone,
|
|
14
|
+
now,
|
|
15
|
+
to_nepali_timezone,
|
|
16
|
+
to_utc_timezone,
|
|
17
|
+
utc_now,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class TestNepaliTimeZone(unittest.TestCase):
|
|
22
|
+
def setUp(self):
|
|
23
|
+
self.nepali_timezone = NepaliTimeZone()
|
|
24
|
+
return super().setUp()
|
|
25
|
+
|
|
26
|
+
def test_nepali_timezone_dst(self):
|
|
27
|
+
self.assertEqual(self.nepali_timezone.dst(None), datetime.timedelta(0))
|
|
28
|
+
|
|
29
|
+
def test_nepali_timezone_utcoffset(self):
|
|
30
|
+
self.assertEqual(
|
|
31
|
+
self.nepali_timezone.utcoffset(None),
|
|
32
|
+
datetime.timedelta(hours=5, minutes=45),
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
def test_nepali_timezone_tzname(self):
|
|
36
|
+
self.assertEqual(self.nepali_timezone.tzname(None), NEPAL_TIMEZONE)
|
|
37
|
+
|
|
38
|
+
def test_nepali_timezone_str(self):
|
|
39
|
+
self.assertEqual(str(self.nepali_timezone), NEPAL_TIMEZONE)
|
|
40
|
+
|
|
41
|
+
def test_nepali_timezone_repr(self):
|
|
42
|
+
self.assertEqual(repr(self.nepali_timezone), NEPAL_TIMEZONE)
|
|
43
|
+
|
|
44
|
+
def test_datetime_with_nepali_timezone(self):
|
|
45
|
+
dt = datetime.datetime(2015, 10, 14, tzinfo=self.nepali_timezone)
|
|
46
|
+
self.assertEqual(dt.tzinfo, self.nepali_timezone)
|
|
47
|
+
self.assertEqual(dt.tzname(), self.nepali_timezone.tzname(dt))
|
|
48
|
+
self.assertEqual(dt.utcoffset(), self.nepali_timezone.utcoffset(dt))
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class TestTimezoneUtils(unittest.TestCase):
|
|
52
|
+
def test_get_timezone(self):
|
|
53
|
+
tz = get_timezone()
|
|
54
|
+
self.assertIsNotNone(tz)
|
|
55
|
+
|
|
56
|
+
@patch("nepali.timezone.get_timezone")
|
|
57
|
+
@patch("nepali.timezone.datetime")
|
|
58
|
+
def test_timezone_now(self, mock_datetime, mock_get_timezone):
|
|
59
|
+
# mocking data
|
|
60
|
+
mock_get_timezone.return_value = (
|
|
61
|
+
datetime.timezone.utc
|
|
62
|
+
) # mocking get_timezone => UTC
|
|
63
|
+
datetime_now = mock_datetime.datetime.now
|
|
64
|
+
datetime_now.return_value = datetime.datetime(
|
|
65
|
+
2015, 1, 1
|
|
66
|
+
) # mocking datetime.now => 2015/1/1
|
|
67
|
+
|
|
68
|
+
# calling now
|
|
69
|
+
current_dt = now()
|
|
70
|
+
|
|
71
|
+
# checking
|
|
72
|
+
self.assertEqual(current_dt, datetime.datetime(2015, 1, 1))
|
|
73
|
+
self.assertSequenceEqual(datetime_now.call_args[0], [datetime.timezone.utc])
|
|
74
|
+
|
|
75
|
+
@patch("nepali.timezone.datetime")
|
|
76
|
+
def test_timezone_utc_now(self, mock_datetime):
|
|
77
|
+
# mocking data
|
|
78
|
+
mock_datetime.timezone.utc = (
|
|
79
|
+
datetime.timezone.utc
|
|
80
|
+
) # reverting the utc timezone mock
|
|
81
|
+
datetime_now = mock_datetime.datetime.now
|
|
82
|
+
datetime_now.return_value = datetime.datetime(
|
|
83
|
+
2015, 1, 1
|
|
84
|
+
) # mocking datetime.now => 2015/1/1
|
|
85
|
+
|
|
86
|
+
# calling utc_now
|
|
87
|
+
utc_dt = utc_now()
|
|
88
|
+
|
|
89
|
+
# checking
|
|
90
|
+
self.assertEqual(utc_dt, datetime.datetime(2015, 1, 1))
|
|
91
|
+
self.assertSequenceEqual(datetime_now.call_args[0], [datetime.timezone.utc])
|
|
92
|
+
|
|
93
|
+
# to_utc_timezone
|
|
94
|
+
def test_to_utc_timezone_invalid_input_returns_as_it_is(self):
|
|
95
|
+
self.assertEqual(to_utc_timezone("test"), "test") # type: ignore
|
|
96
|
+
|
|
97
|
+
@patch("nepali.timezone.get_timezone")
|
|
98
|
+
def test_to_utc_timezone_without_timezone(self, mock_get_timezone):
|
|
99
|
+
mock_get_timezone.return_value = datetime.timezone(
|
|
100
|
+
offset=datetime.timedelta(hours=5, minutes=30)
|
|
101
|
+
) # Indian timezone
|
|
102
|
+
dt = datetime.datetime(2014, 11, 14, 10, 15, 11)
|
|
103
|
+
utc_dt = to_utc_timezone(dt)
|
|
104
|
+
self.assertEqual(utc_dt.tzinfo, datetime.timezone.utc)
|
|
105
|
+
self.assertSequenceEqual(
|
|
106
|
+
(
|
|
107
|
+
utc_dt.year,
|
|
108
|
+
utc_dt.month,
|
|
109
|
+
utc_dt.day,
|
|
110
|
+
utc_dt.hour,
|
|
111
|
+
utc_dt.minute,
|
|
112
|
+
utc_dt.second,
|
|
113
|
+
),
|
|
114
|
+
(2014, 11, 14, 4, 45, 11),
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
def test_to_utc_timezone_with_utc_timezone(self):
|
|
118
|
+
dt = datetime.datetime(2014, 11, 14, 10, 15, 11, tzinfo=datetime.timezone.utc)
|
|
119
|
+
utc_dt = to_utc_timezone(dt)
|
|
120
|
+
self.assertEqual(utc_dt.tzinfo, datetime.timezone.utc)
|
|
121
|
+
self.assertSequenceEqual(
|
|
122
|
+
(
|
|
123
|
+
utc_dt.year,
|
|
124
|
+
utc_dt.month,
|
|
125
|
+
utc_dt.day,
|
|
126
|
+
utc_dt.hour,
|
|
127
|
+
utc_dt.minute,
|
|
128
|
+
utc_dt.second,
|
|
129
|
+
),
|
|
130
|
+
(2014, 11, 14, 10, 15, 11),
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
def test_to_utc_timezone_with_nepali_timezone(self):
|
|
134
|
+
dt = datetime.datetime(2014, 11, 14, 10, 15, 11, tzinfo=NepaliTimeZone())
|
|
135
|
+
utc_dt = to_utc_timezone(dt)
|
|
136
|
+
self.assertEqual(utc_dt.tzinfo, datetime.timezone.utc)
|
|
137
|
+
self.assertSequenceEqual(
|
|
138
|
+
(
|
|
139
|
+
utc_dt.year,
|
|
140
|
+
utc_dt.month,
|
|
141
|
+
utc_dt.day,
|
|
142
|
+
utc_dt.hour,
|
|
143
|
+
utc_dt.minute,
|
|
144
|
+
utc_dt.second,
|
|
145
|
+
),
|
|
146
|
+
(2014, 11, 14, 4, 30, 11),
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
# to_nepali_timezone
|
|
150
|
+
def test_to_nepali_timezone_invalid_input_returns_as_it_is(self):
|
|
151
|
+
self.assertEqual(to_nepali_timezone("test"), "test") # type: ignore
|
|
152
|
+
|
|
153
|
+
def test_to_nepali_timezone_without_timezone(self):
|
|
154
|
+
dt = datetime.datetime(2014, 11, 14, 10, 15, 11)
|
|
155
|
+
nepali_dt = to_nepali_timezone(dt)
|
|
156
|
+
self.assertEqual(nepali_dt.tzinfo, NepaliTimeZone())
|
|
157
|
+
self.assertSequenceEqual(
|
|
158
|
+
(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second),
|
|
159
|
+
(2014, 11, 14, 10, 15, 11),
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
def test_to_nepali_timezone_with_utc_timezone(self):
|
|
163
|
+
dt = datetime.datetime(2014, 11, 14, 4, 30, 11, tzinfo=datetime.timezone.utc)
|
|
164
|
+
nepali_dt = to_nepali_timezone(dt)
|
|
165
|
+
self.assertEqual(nepali_dt.tzinfo, NepaliTimeZone())
|
|
166
|
+
self.assertSequenceEqual(
|
|
167
|
+
(
|
|
168
|
+
nepali_dt.year,
|
|
169
|
+
nepali_dt.month,
|
|
170
|
+
nepali_dt.day,
|
|
171
|
+
nepali_dt.hour,
|
|
172
|
+
nepali_dt.minute,
|
|
173
|
+
nepali_dt.second,
|
|
174
|
+
),
|
|
175
|
+
(2014, 11, 14, 10, 15, 11),
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
def test_to_nepali_timezone_with_nepali_timezone(self):
|
|
179
|
+
dt = datetime.datetime(2014, 11, 14, 10, 15, 11, tzinfo=NepaliTimeZone())
|
|
180
|
+
nepali_dt = to_nepali_timezone(dt)
|
|
181
|
+
self.assertEqual(nepali_dt.tzinfo, NepaliTimeZone())
|
|
182
|
+
self.assertSequenceEqual(
|
|
183
|
+
(
|
|
184
|
+
nepali_dt.year,
|
|
185
|
+
nepali_dt.month,
|
|
186
|
+
nepali_dt.day,
|
|
187
|
+
nepali_dt.hour,
|
|
188
|
+
nepali_dt.minute,
|
|
189
|
+
nepali_dt.second,
|
|
190
|
+
),
|
|
191
|
+
(2014, 11, 14, 10, 15, 11),
|
|
192
|
+
)
|