aa-mumble-quick-connect 0.0.4__py3-none-any.whl → 0.0.6__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.
- aa_mumble_quick_connect/__init__.py +1 -1
- aa_mumble_quick_connect/admin.py +1 -1
- aa_mumble_quick_connect/locale/cs_CZ/LC_MESSAGES/django.po +23 -11
- aa_mumble_quick_connect/locale/de/LC_MESSAGES/django.mo +0 -0
- aa_mumble_quick_connect/locale/de/LC_MESSAGES/django.po +24 -12
- aa_mumble_quick_connect/locale/django.pot +28 -12
- aa_mumble_quick_connect/locale/es/LC_MESSAGES/django.po +23 -11
- aa_mumble_quick_connect/locale/fr_FR/LC_MESSAGES/django.po +23 -11
- aa_mumble_quick_connect/locale/it_IT/LC_MESSAGES/django.po +23 -11
- aa_mumble_quick_connect/locale/ja/LC_MESSAGES/django.po +23 -11
- aa_mumble_quick_connect/locale/ko_KR/LC_MESSAGES/django.po +23 -11
- aa_mumble_quick_connect/locale/nl_NL/LC_MESSAGES/django.po +23 -11
- aa_mumble_quick_connect/locale/pl_PL/LC_MESSAGES/django.po +23 -11
- aa_mumble_quick_connect/locale/ru/LC_MESSAGES/django.po +23 -11
- aa_mumble_quick_connect/locale/sk/LC_MESSAGES/django.po +23 -11
- aa_mumble_quick_connect/locale/uk/LC_MESSAGES/django.po +23 -11
- aa_mumble_quick_connect/locale/zh_Hans/LC_MESSAGES/django.po +23 -11
- aa_mumble_quick_connect/migrations/0002_mumblelink_disable_url_verification.py +28 -0
- aa_mumble_quick_connect/models.py +66 -12
- aa_mumble_quick_connect/templates/aa_mumble_quick_connect/index.html +15 -0
- aa_mumble_quick_connect/tests/test_models.py +115 -3
- {aa_mumble_quick_connect-0.0.4.dist-info → aa_mumble_quick_connect-0.0.6.dist-info}/METADATA +2 -2
- {aa_mumble_quick_connect-0.0.4.dist-info → aa_mumble_quick_connect-0.0.6.dist-info}/RECORD +25 -24
- {aa_mumble_quick_connect-0.0.4.dist-info → aa_mumble_quick_connect-0.0.6.dist-info}/WHEEL +0 -0
- {aa_mumble_quick_connect-0.0.4.dist-info → aa_mumble_quick_connect-0.0.6.dist-info}/licenses/LICENSE +0 -0
|
@@ -63,7 +63,7 @@ class TestMumbleLink(TestCase):
|
|
|
63
63
|
@override_settings(MUMBLE_URL="mumble.example.com")
|
|
64
64
|
def test_validate_mumble_url_with_invalid_url(self):
|
|
65
65
|
"""
|
|
66
|
-
Test validate Mumble URL with invalid URL
|
|
66
|
+
Test validate Mumble URL with invalid URL raises ValidationError
|
|
67
67
|
|
|
68
68
|
:return:
|
|
69
69
|
:rtype:
|
|
@@ -73,6 +73,118 @@ class TestMumbleLink(TestCase):
|
|
|
73
73
|
|
|
74
74
|
with self.assertRaisesMessage(
|
|
75
75
|
expected_exception=ValidationError,
|
|
76
|
-
expected_message=f
|
|
76
|
+
expected_message=f'The Mumble channel URL must start with "{expected_mumble_base_url}"',
|
|
77
77
|
):
|
|
78
|
-
validate_mumble_url("
|
|
78
|
+
validate_mumble_url("mumble://example.com")
|
|
79
|
+
|
|
80
|
+
@override_settings(MUMBLE_URL="mumble.example.com")
|
|
81
|
+
def test_validate_mumble_url_with_disabled_url_verification(self):
|
|
82
|
+
"""
|
|
83
|
+
Test validate Mumble URL with disabled URL verification
|
|
84
|
+
|
|
85
|
+
:return:
|
|
86
|
+
:rtype:
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
self.assertEqual(
|
|
90
|
+
first=validate_mumble_url(
|
|
91
|
+
url="mumble://example.com", disable_url_verification=True
|
|
92
|
+
),
|
|
93
|
+
second="mumble://example.com",
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
@override_settings(MUMBLE_URL="mumble.example.com")
|
|
97
|
+
def test_validate_mumble_url_with_invalid_url_protocol(self):
|
|
98
|
+
"""
|
|
99
|
+
Test validate Mumble URL with invalid URL protocol raises ValidationError
|
|
100
|
+
|
|
101
|
+
:return:
|
|
102
|
+
:rtype:
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
with self.assertRaisesMessage(
|
|
106
|
+
expected_exception=ValidationError,
|
|
107
|
+
expected_message='The Mumble channel URL must start with "mumble://"',
|
|
108
|
+
):
|
|
109
|
+
validate_mumble_url(url="https://example.com")
|
|
110
|
+
|
|
111
|
+
@override_settings(MUMBLE_URL="mumble.example.com")
|
|
112
|
+
def test_validate_mumble_url_with_invalid_url_protocol_and_disabled_url_verification(
|
|
113
|
+
self,
|
|
114
|
+
):
|
|
115
|
+
"""
|
|
116
|
+
Test validate Mumble URL with invalid URL protocol and disabled URL verification raises ValidationError
|
|
117
|
+
|
|
118
|
+
:return:
|
|
119
|
+
:rtype:
|
|
120
|
+
"""
|
|
121
|
+
|
|
122
|
+
with self.assertRaisesMessage(
|
|
123
|
+
expected_exception=ValidationError,
|
|
124
|
+
expected_message='The Mumble channel URL must start with "mumble://"',
|
|
125
|
+
):
|
|
126
|
+
validate_mumble_url(
|
|
127
|
+
url="https://example.com", disable_url_verification=True
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
@override_settings(MUMBLE_URL="mumble.example.com")
|
|
131
|
+
def test_save_with_valid_url(self):
|
|
132
|
+
"""
|
|
133
|
+
Test save with valid URL
|
|
134
|
+
|
|
135
|
+
:return:
|
|
136
|
+
:rtype:
|
|
137
|
+
"""
|
|
138
|
+
|
|
139
|
+
mumble_link = MumbleLink(
|
|
140
|
+
name="Foobar",
|
|
141
|
+
url="mumble://mumble.example.com",
|
|
142
|
+
section=Section.objects.create(name="Foobar"),
|
|
143
|
+
)
|
|
144
|
+
mumble_link.save()
|
|
145
|
+
|
|
146
|
+
self.assertEqual(first=mumble_link.url, second="mumble://mumble.example.com")
|
|
147
|
+
|
|
148
|
+
@override_settings(MUMBLE_URL="mumble.example.com")
|
|
149
|
+
def test_save_with_invalid_url_raises_validation_error(self):
|
|
150
|
+
"""
|
|
151
|
+
Test save with invalid URL raises ValidationError
|
|
152
|
+
|
|
153
|
+
:return:
|
|
154
|
+
:rtype:
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
mumble_link = MumbleLink(
|
|
158
|
+
name="Foobar",
|
|
159
|
+
url="mumble://example.com",
|
|
160
|
+
section=Section.objects.create(name="Foobar"),
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
expected_mumble_base_url = f"mumble://{settings.MUMBLE_URL}"
|
|
164
|
+
|
|
165
|
+
with self.assertRaisesMessage(
|
|
166
|
+
expected_exception=ValidationError,
|
|
167
|
+
expected_message=f'The Mumble channel URL must start with "{expected_mumble_base_url}"',
|
|
168
|
+
):
|
|
169
|
+
mumble_link.clean()
|
|
170
|
+
|
|
171
|
+
@override_settings(MUMBLE_URL="mumble.example.com")
|
|
172
|
+
def tes_save_with_invalid_url_does_not_raise_validation_error(self):
|
|
173
|
+
"""
|
|
174
|
+
Test save with invalid URL does not raise ValidationError
|
|
175
|
+
|
|
176
|
+
:return:
|
|
177
|
+
:rtype:
|
|
178
|
+
"""
|
|
179
|
+
|
|
180
|
+
mumble_link = MumbleLink(
|
|
181
|
+
name="Foobar",
|
|
182
|
+
url="mumble://example.com",
|
|
183
|
+
section=Section.objects.create(name="Foobar"),
|
|
184
|
+
disable_url_verification=True,
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
mumble_link.clean()
|
|
188
|
+
mumble_link.save()
|
|
189
|
+
|
|
190
|
+
self.assertEqual(first=mumble_link.url, second="mumble://example.com")
|
{aa_mumble_quick_connect-0.0.4.dist-info → aa_mumble_quick_connect-0.0.6.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aa-mumble-quick-connect
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.6
|
|
4
4
|
Summary: Quick connect links to your Mumble server channels
|
|
5
5
|
Project-URL: Changelog, https://github.com/ppfeufer/aa-mumble-quick-connect/blob/master/CHANGELOG.md
|
|
6
6
|
Project-URL: Documentation, https://github.com/ppfeufer/aa-mumble-quick-connect/blob/master/README.md
|
|
@@ -771,7 +771,7 @@ Add the app to your `INSTALLED_APPS` in your `local.py`:
|
|
|
771
771
|
|
|
772
772
|
```python
|
|
773
773
|
INSTALLED_APPS += [
|
|
774
|
-
"
|
|
774
|
+
"aa_mumble_quick_connect", # https://github.com/ppfeufer/aa-mumble-quick-connect
|
|
775
775
|
]
|
|
776
776
|
```
|
|
777
777
|
|
|
@@ -1,42 +1,43 @@
|
|
|
1
|
-
aa_mumble_quick_connect/__init__.py,sha256=
|
|
2
|
-
aa_mumble_quick_connect/admin.py,sha256
|
|
1
|
+
aa_mumble_quick_connect/__init__.py,sha256=kKpXjFaU72SFBCHOMQDAaYSi4FteWPOkN9eur-oF2f4,88
|
|
2
|
+
aa_mumble_quick_connect/admin.py,sha256=-E1_6HVosf1VeDGWTeMKCO18NBXh9E-3rP2TGhpb-aQ,524
|
|
3
3
|
aa_mumble_quick_connect/apps.py,sha256=rLXhexmN5A_QKiaDV7ZA-czIieC7o02kLrh0wx8B3_U,364
|
|
4
4
|
aa_mumble_quick_connect/auth_hooks.py,sha256=EV9n-R6fTdnv3qNyC-mnXJJdx4Fah9hfhkzF4VPwXSE,1585
|
|
5
5
|
aa_mumble_quick_connect/dependency_checks.py,sha256=N_-ssY1CW0_KnOQ6XkLdzuxa7MlBDvd5S1ABH4vj4UQ,382
|
|
6
|
-
aa_mumble_quick_connect/models.py,sha256=
|
|
6
|
+
aa_mumble_quick_connect/models.py,sha256=S_Z7TY0JzxhyohfLR5bsEcxwq3rhE7yluuQFDXMhtMM,3814
|
|
7
7
|
aa_mumble_quick_connect/urls.py,sha256=pPKh325NcUlRBqWSutAHJ_46IjxUDTNerXw2ptdaNos,304
|
|
8
8
|
aa_mumble_quick_connect/views.py,sha256=1IAYLbgRIUczX1aDRKh7V95KxTo8ZrVPz8gtKLOp8SA,1345
|
|
9
|
-
aa_mumble_quick_connect/locale/django.pot,sha256=
|
|
9
|
+
aa_mumble_quick_connect/locale/django.pot,sha256=pNlLy6KWfUy-1DPbCIT9BhDopD9s3zBwKRZgaDqcKAA,3151
|
|
10
10
|
aa_mumble_quick_connect/locale/cs_CZ/LC_MESSAGES/django.mo,sha256=8bbLnti-G_cMZXa-Z5hW_4nGdzFQoY_OX46-y6lkZNw,941
|
|
11
|
-
aa_mumble_quick_connect/locale/cs_CZ/LC_MESSAGES/django.po,sha256=
|
|
12
|
-
aa_mumble_quick_connect/locale/de/LC_MESSAGES/django.mo,sha256=
|
|
13
|
-
aa_mumble_quick_connect/locale/de/LC_MESSAGES/django.po,sha256=
|
|
11
|
+
aa_mumble_quick_connect/locale/cs_CZ/LC_MESSAGES/django.po,sha256=y4dlYatR3FJadO4TVlsS_WmKS_I7qIbztFkwvNdAgQk,3527
|
|
12
|
+
aa_mumble_quick_connect/locale/de/LC_MESSAGES/django.mo,sha256=cxi6spyZL7G_-9I4o0XPnzlfAum0qm2CDZUdx11FbvY,2734
|
|
13
|
+
aa_mumble_quick_connect/locale/de/LC_MESSAGES/django.po,sha256=I0daqLd_T8pJjr23zFt03jENVsFN2oSRJ7E5tOsaZLA,4229
|
|
14
14
|
aa_mumble_quick_connect/locale/es/LC_MESSAGES/django.mo,sha256=xMiCK1jIKTrfLI5F6BfvwnpCSkRdCvofQhlKZSzQHjw,859
|
|
15
|
-
aa_mumble_quick_connect/locale/es/LC_MESSAGES/django.po,sha256=
|
|
15
|
+
aa_mumble_quick_connect/locale/es/LC_MESSAGES/django.po,sha256=X-qwNRdLiLWfxBmCyIxZlaIsxKj-8_3i8HpO75tiTqA,3440
|
|
16
16
|
aa_mumble_quick_connect/locale/fr_FR/LC_MESSAGES/django.mo,sha256=TMRZ8YLlG2Iy8zUfAD8pKsaRUZ08IQo5BIlQHhsODQ8,877
|
|
17
|
-
aa_mumble_quick_connect/locale/fr_FR/LC_MESSAGES/django.po,sha256=
|
|
17
|
+
aa_mumble_quick_connect/locale/fr_FR/LC_MESSAGES/django.po,sha256=HZj2t0EFL7NHTsDCA_3MlmzIIDauonQ7E3Jg7IAuR7U,3462
|
|
18
18
|
aa_mumble_quick_connect/locale/it_IT/LC_MESSAGES/django.mo,sha256=Vh2mBOjclawqzzOhX-kc-daTxpxxmMRhw7x1MGQSm2E,570
|
|
19
|
-
aa_mumble_quick_connect/locale/it_IT/LC_MESSAGES/django.po,sha256=
|
|
19
|
+
aa_mumble_quick_connect/locale/it_IT/LC_MESSAGES/django.po,sha256=DWTV_YgBsi-98YekNG0I3LtMYyx3LaysEN7c2T6jZmA,3313
|
|
20
20
|
aa_mumble_quick_connect/locale/ja/LC_MESSAGES/django.mo,sha256=aWGp8nqJkVuMlhrZGkSHIN3nZtheZj66SeU3kSu4kgU,577
|
|
21
|
-
aa_mumble_quick_connect/locale/ja/LC_MESSAGES/django.po,sha256=
|
|
21
|
+
aa_mumble_quick_connect/locale/ja/LC_MESSAGES/django.po,sha256=2V-c7qHZ1pVoNXCE9pO1p_eLb_u-GsBXkweSUtNZpas,3316
|
|
22
22
|
aa_mumble_quick_connect/locale/ko_KR/LC_MESSAGES/django.mo,sha256=YQ9djxbHx7egHmQXmYMyZWX4jnoPMLqeoXc6H83bRRs,835
|
|
23
|
-
aa_mumble_quick_connect/locale/ko_KR/LC_MESSAGES/django.po,sha256=
|
|
24
|
-
aa_mumble_quick_connect/locale/nl_NL/LC_MESSAGES/django.po,sha256=
|
|
23
|
+
aa_mumble_quick_connect/locale/ko_KR/LC_MESSAGES/django.po,sha256=i-JXY2esWHSerm7ZO0ubMKiZVy7iVTUKakVAI4p4dlw,3420
|
|
24
|
+
aa_mumble_quick_connect/locale/nl_NL/LC_MESSAGES/django.po,sha256=iEakDMS0NgLaZaEITOANi__0k7vg6KGCjdV-h7BLD8k,3172
|
|
25
25
|
aa_mumble_quick_connect/locale/pl_PL/LC_MESSAGES/django.mo,sha256=j8KXKASN0F5fV7e_drJn9EDJuc7_rqJ-7sMD2klAzO0,853
|
|
26
|
-
aa_mumble_quick_connect/locale/pl_PL/LC_MESSAGES/django.po,sha256=
|
|
26
|
+
aa_mumble_quick_connect/locale/pl_PL/LC_MESSAGES/django.po,sha256=4ZWwgADcOC4RhflJ5ro1npWat_Rlz9HeI8n3CipD16M,3475
|
|
27
27
|
aa_mumble_quick_connect/locale/ru/LC_MESSAGES/django.mo,sha256=4xeVdkJ5RwFcUz331LwRhM9TbKlETfZDbP3HN5U-TFQ,1069
|
|
28
|
-
aa_mumble_quick_connect/locale/ru/LC_MESSAGES/django.po,sha256=
|
|
29
|
-
aa_mumble_quick_connect/locale/sk/LC_MESSAGES/django.po,sha256=
|
|
28
|
+
aa_mumble_quick_connect/locale/ru/LC_MESSAGES/django.po,sha256=puA_KMq0XBq0RQZi526JhVMy2fSlvbNUuxq0e0Hd3Ig,3650
|
|
29
|
+
aa_mumble_quick_connect/locale/sk/LC_MESSAGES/django.po,sha256=nVdujSUgLbx58MrI-32_xKJyxCEdAVgaJzlRZMLgsVo,3249
|
|
30
30
|
aa_mumble_quick_connect/locale/uk/LC_MESSAGES/django.mo,sha256=IDeqlHifAcDBImaMk29o7QQDIpjK-DVsqU_elTHxlHQ,985
|
|
31
|
-
aa_mumble_quick_connect/locale/uk/LC_MESSAGES/django.po,sha256=
|
|
31
|
+
aa_mumble_quick_connect/locale/uk/LC_MESSAGES/django.po,sha256=SqUbGjeYcXTPt1GaTfTNJ1f_GohdeqbZXp5SGZSNs38,3601
|
|
32
32
|
aa_mumble_quick_connect/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=92XAA_2l_Vbw4ApaCfdPBq8Z8amkfLnspR8OD3dToBU,889
|
|
33
|
-
aa_mumble_quick_connect/locale/zh_Hans/LC_MESSAGES/django.po,sha256=
|
|
33
|
+
aa_mumble_quick_connect/locale/zh_Hans/LC_MESSAGES/django.po,sha256=CM07Tgna15f_AcSCO-GULltOkCzMMoSOHxFvE5-S_L4,3446
|
|
34
34
|
aa_mumble_quick_connect/migrations/0001_initial.py,sha256=DVL1fCdvAtgw7jYpRP8dIm3EgMsRWhpes6LWtpDJefU,3303
|
|
35
|
+
aa_mumble_quick_connect/migrations/0002_mumblelink_disable_url_verification.py,sha256=9Vs8rv-8x63Gve0x3d6TH3f1DfiTNccmr2PIZa7Atb8,979
|
|
35
36
|
aa_mumble_quick_connect/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
37
|
aa_mumble_quick_connect/static/aa_mumble_quick_connect/images/mumble-icon.png,sha256=FQMmSeEfIyrA3fux7reFNQ-rzCaXPfRRFcR7nvTxtRg,46940
|
|
37
38
|
aa_mumble_quick_connect/static/aa_mumble_quick_connect/libs/masonry-layout/4.2.2/masonry.pkgd.min.js,sha256=Nn1q_fx0H7SNLZMQ5Hw5JLaTRZp0yILA_FRexe19VdI,24103
|
|
38
39
|
aa_mumble_quick_connect/templates/aa_mumble_quick_connect/base.html,sha256=PZtcXi2JkideJarxWVzozLvhnrjeHCeQJLrf8rpfb2I,636
|
|
39
|
-
aa_mumble_quick_connect/templates/aa_mumble_quick_connect/index.html,sha256=
|
|
40
|
+
aa_mumble_quick_connect/templates/aa_mumble_quick_connect/index.html,sha256=8YnbQ5gndZoGCgX2ZIOtzUFusYJ2G6WA3SRTBxGpMDA,1471
|
|
40
41
|
aa_mumble_quick_connect/templates/aa_mumble_quick_connect/bundles/masonry-layout-js.html,sha256=P475ZYpQ6t0nhabeEzVAGUyTyfsXaC7O63KtU4bGGH8,273
|
|
41
42
|
aa_mumble_quick_connect/templates/aa_mumble_quick_connect/partials/channels-in-sections.html,sha256=ve95JH28EkLuJmnqOV40jAII3mZaqFEOkXI5YfTKz5s,2130
|
|
42
43
|
aa_mumble_quick_connect/templates/aa_mumble_quick_connect/partials/channels-without-sections.html,sha256=Urkbsr335xZpKW-RZqfQPBJ0-VVgtUfGKUYCWai7cIg,1754
|
|
@@ -45,10 +46,10 @@ aa_mumble_quick_connect/templatetags/aa_mumble_quick_connect.py,sha256=VnsJtgbbG
|
|
|
45
46
|
aa_mumble_quick_connect/tests/__init__.py,sha256=NLuMBNDHYOXDmPgpyG-g_kDaATVQWv1iC-dJ8BA1kZc,29
|
|
46
47
|
aa_mumble_quick_connect/tests/test_access.py,sha256=APnVu5JaITBDgBh-mU3VYboDBcO_YTqcmhk99nf_p04,4796
|
|
47
48
|
aa_mumble_quick_connect/tests/test_auth_hooks.py,sha256=S82JzwKM4avQyHyVgBRCfPj7frPiCHkOkNdITnRMvGI,3208
|
|
48
|
-
aa_mumble_quick_connect/tests/test_models.py,sha256=
|
|
49
|
+
aa_mumble_quick_connect/tests/test_models.py,sha256=ngT6nceZXjTJkiGtIi5DFlCNPE-Y0L2qr-fmUOlnO_4,5440
|
|
49
50
|
aa_mumble_quick_connect/tests/test_templatetags.py,sha256=UQACDpf8vY2is0GvidBGg0Yn_Zw22kjE2CKv5YycNQw,954
|
|
50
51
|
aa_mumble_quick_connect/tests/utils.py,sha256=RVbqdYkiREkClWxZpPkfoMn5FBRr0jMdApk83JbjKa0,671
|
|
51
|
-
aa_mumble_quick_connect-0.0.
|
|
52
|
-
aa_mumble_quick_connect-0.0.
|
|
53
|
-
aa_mumble_quick_connect-0.0.
|
|
54
|
-
aa_mumble_quick_connect-0.0.
|
|
52
|
+
aa_mumble_quick_connect-0.0.6.dist-info/METADATA,sha256=qfQQzH0lYcP_xyBcUlgVUZ6-5fDQyqWdoVkx35t8EoE,47368
|
|
53
|
+
aa_mumble_quick_connect-0.0.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
54
|
+
aa_mumble_quick_connect-0.0.6.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
55
|
+
aa_mumble_quick_connect-0.0.6.dist-info/RECORD,,
|
|
File without changes
|
{aa_mumble_quick_connect-0.0.4.dist-info → aa_mumble_quick_connect-0.0.6.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|