Skip to content

Commit 3de1180

Browse files
Merge pull request #688 from direct-framework/rename-tool-model
Change Tool model to ToolLanguageMethodology
2 parents 985275a + cf55295 commit 3de1180

10 files changed

Lines changed: 130 additions & 62 deletions

main/admin.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
ProviderResource,
1515
SkillLevelResource,
1616
SkillResource,
17-
ToolResource,
17+
ToolLanguageMethodologyResource,
1818
)
1919
from .models import (
2020
Competency,
@@ -23,7 +23,7 @@
2323
Provider,
2424
Skill,
2525
SkillLevel,
26-
Tool,
26+
ToolLanguageMethodology,
2727
User,
2828
UserSkill,
2929
)
@@ -101,10 +101,10 @@ class ProviderAdmin(ImportExportModelAdmin[Provider]):
101101
resource_classes = (ProviderResource,)
102102

103103

104-
class ToolInline(admin.TabularInline[Tool, LearningResource]):
104+
class ToolInline(admin.TabularInline[ToolLanguageMethodology, LearningResource]):
105105
"""Inline admin class for the Tool model."""
106106

107-
model = Tool.learning_resources.through # type: ignore[assignment]
107+
model = ToolLanguageMethodology.learning_resources.through # type: ignore[assignment]
108108
extra = 0
109109
verbose_name = "Tool, Methodology, Behaviour or Language"
110110
verbose_name_plural = "Tools, Methodologies, Behaviours and Languages"
@@ -125,14 +125,14 @@ def get_language_display(self, obj: LearningResource) -> Any:
125125
return obj.get_language_display()
126126

127127

128-
@admin.register(Tool)
129-
class ToolAdmin(ImportExportModelAdmin[Tool]):
128+
@admin.register(ToolLanguageMethodology)
129+
class ToolAdmin(ImportExportModelAdmin[ToolLanguageMethodology]):
130130
"""Admin class for The Tool model."""
131131

132132
list_display = ("name", "kind", "url")
133133
search_fields = ("name",)
134134
list_filter = ("kind",)
135-
resource_classes = (ToolResource,)
135+
resource_classes = (ToolLanguageMethodologyResource,)
136136

137137

138138
@admin.register(Skill)

main/io_resources.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
Skill,
2121
SkillLevel,
2222
SluggedModel,
23-
Tool,
23+
ToolLanguageMethodology,
2424
)
2525

2626

@@ -162,7 +162,7 @@ class Meta:
162162
exclude = ("id",)
163163

164164

165-
class ToolResource(resources.ModelResource):
165+
class ToolLanguageMethodologyResource(resources.ModelResource):
166166
"""A ModelResource to facilitate importing and exporting Tools."""
167167

168168
learning_resources = fields.Field(
@@ -171,9 +171,9 @@ class ToolResource(resources.ModelResource):
171171
)
172172

173173
class Meta:
174-
"""Meta options for ToolResource."""
174+
"""Meta options for ToolLanguageMethodologyResource."""
175175

176-
model = Tool
176+
model = ToolLanguageMethodology
177177
skip_unchanged = True
178178
import_id_fields = ("slug",)
179179
exclude = ("id",)
@@ -188,7 +188,9 @@ class SkillResource(resources.ModelResource):
188188
tools = fields.Field(
189189
"tools",
190190
column_name="tools_languages_methodologies",
191-
widget=SluggedM2MWidget(Tool, "tools_languages_methodologies"),
191+
widget=SluggedM2MWidget(
192+
ToolLanguageMethodology, "tools_languages_methodologies"
193+
),
192194
)
193195
learning_resources = fields.Field(
194196
"learning_resources",
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Generated by Django 6.0.2 on 2026-04-14 18:04
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('main', '0026_user_agreed_to_tos_user_date_agreed'),
10+
]
11+
12+
operations = [
13+
migrations.RenameModel(
14+
old_name='Tool',
15+
new_name='ToolLanguageMethodology',
16+
),
17+
]
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Generated by Django 6.0.3 on 2026-04-15 14:18
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('main', '0027_rename_tool_toollanguagemethodology'),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name='toollanguagemethodology',
15+
options={'verbose_name': 'Tool, language or methodology', 'verbose_name_plural': 'Tools, languages and methodologies'},
16+
),
17+
migrations.AlterField(
18+
model_name='skill',
19+
name='tools',
20+
field=models.ManyToManyField(blank=True, to='main.toollanguagemethodology', verbose_name='tools, languages and methodologies'),
21+
),
22+
migrations.AlterField(
23+
model_name='toollanguagemethodology',
24+
name='kind',
25+
field=models.CharField(choices=[('tool', 'Computational tool'), ('language', 'Programming or data language'), ('methodology', 'Methodology')], default='tool', max_length=12),
26+
),
27+
]

main/models/framework_models.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -113,20 +113,20 @@ class LearningResource(SluggedModel):
113113
description = models.TextField(blank=True, null=True) # type: ignore[assignment]
114114

115115

116-
class Tool(SluggedModel):
116+
class ToolLanguageMethodology(SluggedModel):
117117
"""Model for tools, languages and methodologies."""
118118

119119
class Meta:
120120
"""Meta options for Tool model."""
121121

122-
verbose_name = _("Tool, Language or Methodology")
123-
verbose_name_plural = _("Tools, Languages and Methodologies")
122+
verbose_name = _("Tool, language or methodology")
123+
verbose_name_plural = _("Tools, languages and methodologies")
124124

125125
class Kind(models.TextChoices):
126126
"""Enumeration of Kind choices."""
127127

128-
TOOL = "tool", "Tool"
129-
LANGUAGE = "language", "Language"
128+
TOOL = "tool", "Computational tool"
129+
LANGUAGE = "language", "Programming or data language"
130130
METHODOLOGY = "methodology", "Methodology"
131131

132132
kind = models.CharField(max_length=12, choices=Kind, default=Kind.TOOL)
@@ -144,9 +144,9 @@ class Meta:
144144

145145
competency = models.ForeignKey(Competency, on_delete=models.CASCADE)
146146
tools = models.ManyToManyField(
147-
Tool,
147+
ToolLanguageMethodology,
148148
blank=True,
149-
verbose_name="tools, methodologies, behaviours and languages",
149+
verbose_name="tools, languages and methodologies",
150150
)
151151
learning_resources = models.ManyToManyField(LearningResource, blank=True)
152152
related_skills = models.ManyToManyField("self", blank=True)

main/views/page_views.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from django.templatetags.static import static
1414
from django.views.generic.base import TemplateView
1515

16-
from ..models import CompetencyDomain, Skill, SkillLevel, Tool
16+
from ..models import CompetencyDomain, Skill, SkillLevel, ToolLanguageMethodology
1717

1818
logger = logging.getLogger(__name__)
1919

@@ -200,9 +200,13 @@ def get_context_data(self, **kwargs: Mapping[str, Any]) -> dict[str, Any]:
200200
context["skill"] = skill
201201
context["related_skills"] = skill.related_skills.all().order_by("name")
202202
context["learning_resources"] = skill.learning_resources.all().order_by("name")
203-
context["tools"] = tools_qs.filter(kind=Tool.Kind.TOOL)
204-
context["languages"] = tools_qs.filter(kind=Tool.Kind.LANGUAGE)
205-
context["methodologies"] = tools_qs.filter(kind=Tool.Kind.METHODOLOGY)
203+
context["tools"] = tools_qs.filter(kind=ToolLanguageMethodology.Kind.TOOL)
204+
context["languages"] = tools_qs.filter(
205+
kind=ToolLanguageMethodology.Kind.LANGUAGE
206+
)
207+
context["methodologies"] = tools_qs.filter(
208+
kind=ToolLanguageMethodology.Kind.METHODOLOGY
209+
)
206210

207211
return context
208212

tests/main/conftest.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
Provider,
1010
Skill,
1111
SkillLevel,
12-
Tool,
12+
ToolLanguageMethodology,
1313
UserSkill,
1414
)
1515

@@ -57,12 +57,12 @@ def learning_resource(provider: Provider) -> LearningResource:
5757

5858

5959
@pytest.fixture
60-
def tool(learning_resource: LearningResource) -> Tool:
60+
def tool(learning_resource: LearningResource) -> ToolLanguageMethodology:
6161
"""Fixture for creating a Tool instance."""
62-
tool = Tool.objects.create(
62+
tool = ToolLanguageMethodology.objects.create(
6363
name="Tool",
6464
description="A tool, methodology, behaviour or language",
65-
kind=Tool.Kind.TOOL,
65+
kind=ToolLanguageMethodology.Kind.TOOL,
6666
url="https://example.com/tool",
6767
)
6868
tool.learning_resources.add(learning_resource)
@@ -71,7 +71,9 @@ def tool(learning_resource: LearningResource) -> Tool:
7171

7272
@pytest.fixture
7373
def skill(
74-
competency: Competency, tool: Tool, learning_resource: LearningResource
74+
competency: Competency,
75+
tool: ToolLanguageMethodology,
76+
learning_resource: LearningResource,
7577
) -> Skill:
7678
"""Fixture for creating a Skill instance."""
7779
skill = Skill.objects.create(

tests/main/test_admin_views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
Provider,
1616
Skill,
1717
SkillLevel,
18-
Tool,
18+
ToolLanguageMethodology,
1919
)
2020

2121

@@ -121,7 +121,7 @@ class TestLearningResourceAdmin(AdminMixin):
121121
class TestToolAdmin(AdminMixin):
122122
"""Test suite for the Tool admin views."""
123123

124-
_model = Tool
124+
_model = ToolLanguageMethodology
125125
_data: ClassVar[dict[str, Any]] = {
126126
"name": "Test Tool",
127127
"description": "Test Description",

tests/main/test_framework_models.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
Skill,
1414
SkillLevel,
1515
SluggedModel,
16-
Tool,
16+
ToolLanguageMethodology,
1717
)
1818

1919

@@ -91,7 +91,7 @@ def test_competency_model(
9191
def test_skill_model(
9292
skill: Skill,
9393
competency: Competency,
94-
tool: Tool,
94+
tool: ToolLanguageMethodology,
9595
learning_resource: LearningResource,
9696
) -> None:
9797
"""Test the Skill model."""
@@ -157,13 +157,15 @@ def test_learning_resource_model(
157157

158158

159159
@pytest.mark.django_db
160-
def test_tool_model(tool: Tool, learning_resource: LearningResource) -> None:
160+
def test_tool_model(
161+
tool: ToolLanguageMethodology, learning_resource: LearningResource
162+
) -> None:
161163
"""Test the Tool model."""
162164
assert isinstance(tool, SluggedModel)
163165
assert tool.name == str(tool) == "Tool"
164166
assert tool.description == "A tool, methodology, behaviour or language"
165167
assert tool.slug == "tool"
166-
assert tool.kind == Tool.Kind.TOOL
168+
assert tool.kind == ToolLanguageMethodology.Kind.TOOL
167169
assert tool.url == "https://example.com/tool"
168170
assert learning_resource in tool.learning_resources.all()
169171

0 commit comments

Comments
 (0)