Skip to content

Commit a11ae03

Browse files
refactor: run make format
1 parent b7787be commit a11ae03

18 files changed

Lines changed: 210 additions & 263 deletions

openedx_authz/api/data.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,7 @@ class SubjectData(AuthZData, metaclass=SubjectMeta):
491491

492492
subject_id: int = None # Optional field to link to actual subject instance
493493

494+
494495
@define
495496
class UserData(SubjectData):
496497
"""A user subject for authorization in the Open edX platform.

openedx_authz/engine/adapter.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ def filter_query(
130130
queryset = queryset.filter(**filter_kwargs)
131131
return queryset.order_by("id")
132132

133-
134133
def query_policy(self, filter: Filter) -> QuerySet: # pylint: disable=redefined-builtin
135134
"""
136135
Retrieve policy rules from the database based on filter criteria.

openedx_authz/migrations/0001_initial.py

Lines changed: 94 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,85 +6,139 @@
66

77

88
class Migration(migrations.Migration):
9-
109
initial = True
1110

1211
dependencies = [
13-
('casbin_adapter', '0001_initial'),
14-
migrations.swappable_dependency(
15-
getattr(
16-
settings,
17-
"OPENEDX_AUTHZ_CONTENT_LIBRARY_MODEL",
18-
"content_libraries.ContentLibrary",
19-
)
20-
),
21-
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
22-
]
12+
("casbin_adapter", "0001_initial"),
13+
migrations.swappable_dependency(
14+
getattr(
15+
settings,
16+
"OPENEDX_AUTHZ_CONTENT_LIBRARY_MODEL",
17+
"content_libraries.ContentLibrary",
18+
)
19+
),
20+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
21+
]
2322

2423
operations = [
2524
migrations.CreateModel(
26-
name='Scope',
25+
name="Scope",
2726
fields=[
28-
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
27+
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
2928
],
3029
options={
31-
'abstract': False,
30+
"abstract": False,
3231
},
3332
),
3433
migrations.CreateModel(
35-
name='Subject',
34+
name="Subject",
3635
fields=[
37-
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
36+
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
3837
],
3938
options={
40-
'abstract': False,
39+
"abstract": False,
4140
},
4241
),
4342
migrations.CreateModel(
44-
name='ExtendedCasbinRule',
43+
name="ExtendedCasbinRule",
4544
fields=[
46-
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
47-
('casbin_rule_key', models.CharField(max_length=255, unique=True)),
48-
('description', models.TextField(blank=True, null=True)),
49-
('created_at', models.DateTimeField(auto_now_add=True)),
50-
('updated_at', models.DateTimeField(auto_now=True)),
51-
('metadata', models.JSONField(blank=True, null=True)),
52-
('casbin_rule', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='extended_rule', to='casbin_adapter.casbinrule')),
53-
('scope', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='casbin_rules', to='openedx_authz.scope')),
54-
('subject', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='casbin_rules', to='openedx_authz.subject')),
45+
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
46+
("casbin_rule_key", models.CharField(max_length=255, unique=True)),
47+
("description", models.TextField(blank=True, null=True)),
48+
("created_at", models.DateTimeField(auto_now_add=True)),
49+
("updated_at", models.DateTimeField(auto_now=True)),
50+
("metadata", models.JSONField(blank=True, null=True)),
51+
(
52+
"casbin_rule",
53+
models.OneToOneField(
54+
on_delete=django.db.models.deletion.CASCADE,
55+
related_name="extended_rule",
56+
to="casbin_adapter.casbinrule",
57+
),
58+
),
59+
(
60+
"scope",
61+
models.ForeignKey(
62+
blank=True,
63+
null=True,
64+
on_delete=django.db.models.deletion.CASCADE,
65+
related_name="casbin_rules",
66+
to="openedx_authz.scope",
67+
),
68+
),
69+
(
70+
"subject",
71+
models.ForeignKey(
72+
blank=True,
73+
null=True,
74+
on_delete=django.db.models.deletion.CASCADE,
75+
related_name="casbin_rules",
76+
to="openedx_authz.subject",
77+
),
78+
),
5579
],
5680
options={
57-
'verbose_name': 'Extended Casbin Rule',
58-
'verbose_name_plural': 'Extended Casbin Rules',
81+
"verbose_name": "Extended Casbin Rule",
82+
"verbose_name_plural": "Extended Casbin Rules",
5983
},
6084
),
6185
migrations.CreateModel(
62-
name='ContentLibraryScope',
86+
name="ContentLibraryScope",
6387
fields=[
64-
('scope_ptr', models.OneToOneField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID', to='openedx_authz.scope', parent_link=True, on_delete=django.db.models.deletion.CASCADE)),
6588
(
66-
'content_library',
89+
"scope_ptr",
90+
models.OneToOneField(
91+
auto_created=True,
92+
primary_key=True,
93+
serialize=False,
94+
verbose_name="ID",
95+
to="openedx_authz.scope",
96+
parent_link=True,
97+
on_delete=django.db.models.deletion.CASCADE,
98+
),
99+
),
100+
(
101+
"content_library",
67102
models.ForeignKey(
68103
blank=True,
69104
null=True,
70105
on_delete=django.db.models.deletion.CASCADE,
71-
related_name='authz_scopes',
106+
related_name="authz_scopes",
72107
to=getattr(
73108
settings,
74-
'OPENEDX_AUTHZ_CONTENT_LIBRARY_MODEL',
75-
'content_libraries.ContentLibrary',
109+
"OPENEDX_AUTHZ_CONTENT_LIBRARY_MODEL",
110+
"content_libraries.ContentLibrary",
76111
),
77112
),
78113
),
79114
],
80-
bases=('openedx_authz.scope',),
115+
bases=("openedx_authz.scope",),
81116
),
82117
migrations.CreateModel(
83-
name='UserSubject',
118+
name="UserSubject",
84119
fields=[
85-
('subject_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='openedx_authz.subject')),
86-
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='authz_subjects', to=settings.AUTH_USER_MODEL)),
120+
(
121+
"subject_ptr",
122+
models.OneToOneField(
123+
auto_created=True,
124+
on_delete=django.db.models.deletion.CASCADE,
125+
parent_link=True,
126+
primary_key=True,
127+
serialize=False,
128+
to="openedx_authz.subject",
129+
),
130+
),
131+
(
132+
"user",
133+
models.ForeignKey(
134+
blank=True,
135+
null=True,
136+
on_delete=django.db.models.deletion.CASCADE,
137+
related_name="authz_subjects",
138+
to=settings.AUTH_USER_MODEL,
139+
),
140+
),
87141
],
88-
bases=('openedx_authz.subject',),
142+
bases=("openedx_authz.subject",),
89143
),
90144
]

openedx_authz/migrations/0002_alter_contentlibraryscope_scope_ptr.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,21 @@
55

66

77
class Migration(migrations.Migration):
8-
98
dependencies = [
10-
('openedx_authz', '0001_initial'),
9+
("openedx_authz", "0001_initial"),
1110
]
1211

1312
operations = [
1413
migrations.AlterField(
15-
model_name='contentlibraryscope',
16-
name='scope_ptr',
17-
field=models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='openedx_authz.scope'),
14+
model_name="contentlibraryscope",
15+
name="scope_ptr",
16+
field=models.OneToOneField(
17+
auto_created=True,
18+
on_delete=django.db.models.deletion.CASCADE,
19+
parent_link=True,
20+
primary_key=True,
21+
serialize=False,
22+
to="openedx_authz.scope",
23+
),
1824
),
1925
]

openedx_authz/migrations/0003_alter_extendedcasbinrule_casbin_rule.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,21 @@
55

66

77
class Migration(migrations.Migration):
8-
98
dependencies = [
10-
('casbin_adapter', '0001_initial'),
11-
('openedx_authz', '0002_alter_contentlibraryscope_scope_ptr'),
9+
("casbin_adapter", "0001_initial"),
10+
("openedx_authz", "0002_alter_contentlibraryscope_scope_ptr"),
1211
]
1312

1413
operations = [
1514
migrations.AlterField(
16-
model_name='extendedcasbinrule',
17-
name='casbin_rule',
18-
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='extended_rule', to='casbin_adapter.casbinrule'),
15+
model_name="extendedcasbinrule",
16+
name="casbin_rule",
17+
field=models.OneToOneField(
18+
blank=True,
19+
null=True,
20+
on_delete=django.db.models.deletion.SET_NULL,
21+
related_name="extended_rule",
22+
to="casbin_adapter.casbinrule",
23+
),
1924
),
2025
]

openedx_authz/models/core.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ def get_or_create_for_external_key(self, scope_data):
3131
"""
3232
namespace = scope_data.NAMESPACE
3333
if namespace not in Scope._registry:
34-
raise ValueError(
35-
f"No Scope subclass registered for namespace '{namespace}'"
36-
)
34+
raise ValueError(f"No Scope subclass registered for namespace '{namespace}'")
3735

3836
scope_class = Scope._registry[namespace]
3937
return scope_class.get_or_create_for_external_key(scope_data)
@@ -59,9 +57,7 @@ def get_or_create_for_external_key(self, subject_data):
5957
"""
6058
namespace = subject_data.NAMESPACE
6159
if namespace not in Subject._registry:
62-
raise ValueError(
63-
f"No Subject subclass registered for namespace '{namespace}'"
64-
)
60+
raise ValueError(f"No Subject subclass registered for namespace '{namespace}'")
6561

6662
subject_class = Subject._registry[namespace]
6763
return subject_class.get_or_create_for_external_key(subject_data)

openedx_authz/models/scopes.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
which are used to define permissions and roles related to content libraries
55
within the Open edX platform.
66
"""
7+
78
from django.apps import apps
89
from django.conf import settings
910
from django.contrib.auth import get_user_model

openedx_authz/tests/api/test_data.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -317,9 +317,7 @@ def test_base_scope_data_with_external_key(self):
317317
"""
318318
scope = ScopeData(external_key="sc:generic_scope")
319319

320-
expected_namespaced = (
321-
f"{ScopeData.NAMESPACE}{ScopeData.SEPARATOR}sc:generic_scope"
322-
)
320+
expected_namespaced = f"{ScopeData.NAMESPACE}{ScopeData.SEPARATOR}sc:generic_scope"
323321

324322
self.assertIsInstance(scope, ScopeData)
325323
self.assertEqual(scope.external_key, "sc:generic_scope")
@@ -442,9 +440,7 @@ def test_role_data_str_with_permissions(self):
442440
action2 = ActionData(external_key="write")
443441
permission1 = PermissionData(action=action1, effect="allow")
444442
permission2 = PermissionData(action=action2, effect="deny")
445-
role = RoleData(
446-
external_key="instructor", permissions=[permission1, permission2]
447-
)
443+
role = RoleData(external_key="instructor", permissions=[permission1, permission2])
448444

449445
actual_str = str(role)
450446

openedx_authz/tests/api/test_roles.py

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ def _mock_get_or_create_scope(scope_data):
4444

4545
def _mock_get_or_create_subject(subject_data):
4646
"""Mock implementation that creates actual Subject instances."""
47-
subject, _ = Subject.objects.get_or_create(
48-
id=hash(subject_data.external_key) % 10000
49-
)
47+
subject, _ = Subject.objects.get_or_create(id=hash(subject_data.external_key) % 10000)
5048
return subject
5149

5250

@@ -306,18 +304,14 @@ def test_assign_role_creates_extended_rule(self):
306304

307305
subj_before = Subject.objects.get_or_create_for_external_key(subject)
308306
scope_before = Scope.objects.get_or_create_for_external_key(scope)
309-
self.assertFalse(
310-
ExtendedCasbinRule.objects.filter(subject=subj_before, scope=scope_before).exists()
311-
)
307+
self.assertFalse(ExtendedCasbinRule.objects.filter(subject=subj_before, scope=scope_before).exists())
312308

313309
result = assign_role_to_subject_in_scope(subject, role, scope)
314310
self.assertTrue(result)
315311

316312
subj_obj = Subject.objects.get_or_create_for_external_key(subject)
317313
scope_obj = Scope.objects.get_or_create_for_external_key(scope)
318-
self.assertTrue(
319-
ExtendedCasbinRule.objects.filter(subject=subj_obj, scope=scope_obj).exists()
320-
)
314+
self.assertTrue(ExtendedCasbinRule.objects.filter(subject=subj_obj, scope=scope_obj).exists())
321315

322316
@ddt_data(
323317
# Library Admin role with actual permissions from authz.policy
@@ -463,9 +457,7 @@ def test_get_subject_role_assignments_in_scope(self, subject_name, scope_name, e
463457
SubjectData(external_key=subject_name), ScopeData(external_key=scope_name)
464458
)
465459

466-
role_names = {
467-
r.external_key for assignment in role_assignments for r in assignment.roles
468-
}
460+
role_names = {r.external_key for assignment in role_assignments for r in assignment.roles}
469461
self.assertEqual(role_names, expected_roles)
470462

471463
@ddt_data(
@@ -617,11 +609,7 @@ def test_batch_assign_role_to_subjects_in_scope(self, subject_names, role, scope
617609
SubjectData(external_key=subject_name),
618610
ScopeData(external_key=scope_name),
619611
)
620-
role_names = {
621-
r.external_key
622-
for assignment in user_roles
623-
for r in assignment.roles
624-
}
612+
role_names = {r.external_key for assignment in user_roles for r in assignment.roles}
625613
self.assertIn(role, role_names)
626614
else:
627615
assign_role_to_subject_in_scope(
@@ -633,9 +621,7 @@ def test_batch_assign_role_to_subjects_in_scope(self, subject_names, role, scope
633621
SubjectData(external_key=subject_names),
634622
ScopeData(external_key=scope_name),
635623
)
636-
role_names = {
637-
r.external_key for assignment in user_roles for r in assignment.roles
638-
}
624+
role_names = {r.external_key for assignment in user_roles for r in assignment.roles}
639625
self.assertIn(role, role_names)
640626

641627
@ddt_data(
@@ -678,11 +664,7 @@ def test_unassign_role_from_subject_in_scope(self, subject_names, role, scope_na
678664
SubjectData(external_key=subject),
679665
ScopeData(external_key=scope_name),
680666
)
681-
role_names = {
682-
r.external_key
683-
for assignment in user_roles
684-
for r in assignment.roles
685-
}
667+
role_names = {r.external_key for assignment in user_roles for r in assignment.roles}
686668
self.assertNotIn(role, role_names)
687669
else:
688670
unassign_role_from_subject_in_scope(
@@ -694,9 +676,7 @@ def test_unassign_role_from_subject_in_scope(self, subject_names, role, scope_na
694676
SubjectData(external_key=subject_names),
695677
ScopeData(external_key=scope_name),
696678
)
697-
role_names = {
698-
r.external_key for assignment in user_roles for r in assignment.roles
699-
}
679+
role_names = {r.external_key for assignment in user_roles for r in assignment.roles}
700680
self.assertNotIn(role, role_names)
701681

702682
@ddt_data(

0 commit comments

Comments
 (0)