Skip to content

Commit 5897351

Browse files
author
Levi Cameron
committed
refactor: make override_csv_permissions available in csv_permissions
- making this available in csv_permissions makes it accessible to apps that want to temporarily override the CSV permissions with a string
1 parent e2aeaf2 commit 5897351

File tree

5 files changed

+30
-26
lines changed

5 files changed

+30
-26
lines changed

csv_permissions/test_utils.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import contextlib
2+
import tempfile
3+
from typing import Iterable
4+
5+
from django.test import override_settings
6+
7+
8+
@contextlib.contextmanager
9+
def override_csv_permissions(csv_datas: Iterable[str]):
10+
"""
11+
Creates temporary CSV files with the specified contents and then sets the
12+
"""
13+
14+
if isinstance(csv_datas, str):
15+
raise TypeError("csv_datas should be an iterable of file contents; did you forget to wrap it in [ ]?")
16+
17+
csv_filepaths = []
18+
19+
with contextlib.ExitStack() as stack:
20+
for csv_data in csv_datas:
21+
f = stack.enter_context(tempfile.NamedTemporaryFile("w"))
22+
csv_filepaths.append(f.name)
23+
f.writelines(csv_data.strip())
24+
f.seek(0)
25+
26+
with override_settings(CSV_PERMISSIONS_PATHS=csv_filepaths):
27+
yield

test_csv_permissions/test_evaluators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
import csv_permissions.evaluators
88
import csv_permissions.legacy
99
import csv_permissions.permissions
10+
from csv_permissions.test_utils import override_csv_permissions
1011

1112
from .models import TestModelA
1213
from .models import TestModelD
13-
from .test_utils import override_csv_permissions
1414
from .test_utils import USER1_TYPE
1515
from .test_utils import User1Factory
1616
from .test_utils import USER2_TYPE

test_csv_permissions/test_legacy.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
import csv_permissions
88
import csv_permissions.legacy
99
import csv_permissions.permissions
10+
from csv_permissions.test_utils import override_csv_permissions
1011
import test_csv_permissions.rules
1112

1213
from .models import TestModelA
1314
from .models import TestModelE
14-
from .test_utils import override_csv_permissions
1515
from .test_utils import USER1_TYPE
1616
from .test_utils import User1Factory
1717
from .test_utils import USER2_TYPE

test_csv_permissions/test_parse.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88
import csv_permissions.evaluators
99
import csv_permissions.permissions
10+
from csv_permissions.test_utils import override_csv_permissions
1011

1112
from .models import TestModelA
12-
from .test_utils import override_csv_permissions
1313
from .test_utils import USER1_TYPE
1414
from .test_utils import User1Factory
1515
from .test_utils import USER2_TYPE

test_csv_permissions/test_utils.py

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
import contextlib
2-
import tempfile
31
from typing import Dict
4-
from typing import Iterable
52
import warnings
63

7-
from django.test import override_settings
84
from django.test.utils import TestContextDecorator
95

106
from test_csv_permissions.factory import UserFactory
@@ -22,25 +18,6 @@ def User2Factory(**kwargs):
2218
return UserFactory.create(user_type=USER2_TYPE, **kwargs)
2319

2420

25-
@contextlib.contextmanager
26-
def override_csv_permissions(csv_datas: Iterable[str]):
27-
"""
28-
Creates temporary CSV files with the specified contents and then sets the
29-
"""
30-
31-
csv_filepaths = []
32-
33-
with contextlib.ExitStack() as stack:
34-
for csv_data in csv_datas:
35-
f = stack.enter_context(tempfile.NamedTemporaryFile("w"))
36-
csv_filepaths.append(f.name)
37-
f.writelines(csv_data)
38-
f.seek(0)
39-
40-
with override_settings(CSV_PERMISSIONS_PATHS=csv_filepaths):
41-
yield
42-
43-
4421
class warning_filter(TestContextDecorator):
4522
"""
4623
Apply a warning.simplefilter()

0 commit comments

Comments
 (0)